A la hora de gestionar volúmenes de datos muy grandes, de varios terabytes o incluso petabytes, los sistemas de bases de datos clásicos están de­s­bo­r­da­dos. En este caso, necesitas apli­ca­cio­nes de big data, que sean fá­ci­l­me­n­te es­ca­la­bles ya que, la mayoría de las veces, es difícil estimar de antemano el volumen real de datos. Uno de los ejemplos modernos más populares de estas apli­ca­cio­nes es Cassandra, una solución de código abierto de­sa­rro­lla­da ori­gi­na­l­me­n­te para Facebook.

¿Qué es Apache Cassandra?

Apache Cassandra es un sistema de gestión de bases de datos (DBMS) de código abierto para bases de datos muy grandes, pero es­tru­c­tu­ra­das. Gracias a la buena es­ca­la­bi­li­dad, estas bases de datos se pueden di­s­tri­buir a di­fe­re­n­tes clústeres, por lo que Cassandra no se encuentra unida a un único servidor.

Cassandra pertenece a las bases de datos NoSQL co­lu­m­na­res. En este caso, NoSQL debe en­te­n­de­r­se como “Not only SQL” (en Español “No solo SQL”) y no como “no SQL” (en Español “sin SQL”). En co­n­tra­po­si­ción a las bases de datos SQL, las es­tru­c­tu­ras NoSQL ofrecen numerosas ventajas al procesar grandes volúmenes de datos, ya que no están sujetas a las li­mi­ta­cio­nes del lenguaje de consulta SQL (Stru­c­tu­red Query Language). Apache Cassandra cuenta con un lenguaje de consulta propio, de­no­mi­na­do Cassandra Query Language (CQL), que es muy parecido al SQL, pero preferido por los de­sa­rro­lla­do­res por estar hecho a la medida de las ca­ra­c­te­rí­s­ti­cas es­pe­cia­les de Cassandra.

Como base de datos NoSQL, Cassandra cuenta con un enfoque re­du­n­da­n­te, lo que reduce mucho la pro­ba­bi­li­dad de fallo. Sin embargo, las bases de datos re­la­cio­na­les suelen tener problemas al replicar los datos.

Hecho

Cassandra fue de­sa­rro­lla­da por Avinash Lakshman y Prashant Malik en Facebook y publicada por primera vez en 2008. En el año 2009, la Apache Software Fou­n­da­tion, una de las co­mu­ni­da­des de de­sa­rro­lla­do­res de código abierto más im­po­r­ta­n­tes, adquirió el proyecto como su­b­pro­ye­c­to de Apache Incubator. Desde febrero de 2011, Apache Cassandra ya es un proyecto in­de­pe­n­die­n­te de máximo nivel dentro de la Apache Software Fou­n­da­tion, como el extendido servidor web Apache, el servidor de búsqueda Solr, la pla­ta­fo­r­ma de me­n­sa­je­ría Kafka o el proyecto sin duda más conocido de Apache, Ope­nO­f­fi­ce.

Al margen de los de­sa­rro­lla­do­res ori­gi­na­les, otras grandes empresas como IBM, Twitter y Rackspace, uno de los mayores pro­vee­do­res in­fo­r­má­ti­cos de EE. UU., co­n­tri­bu­yen al de­sa­rro­llo de Cassandra. Otra co­n­tri­bu­ción im­po­r­ta­n­te es la que hace la empresa DataStax, es­pe­cia­li­za­da en soporte por su­s­cri­p­ción, asi­s­te­n­cia en la in­s­ta­la­ción y cursos de formación sobre la base de datos Cassandra.

Hoy en día, DataStax aporta apro­xi­ma­da­me­n­te el 80 % del de­sa­rro­llo de código abierto de Cassandra y con DataStax En­te­r­pri­se también ofrece una solución de bases de datos comercial basada en Cassandra.

Según la conocida cla­si­fi­ca­ción de DB-Engines, Apache Cassandra es ac­tua­l­me­n­te la base de datos columnar más popular, dejando atrás a grandes nombres como Microsoft Azure Cosmos DB o Google Cloud Bigtable.

Cassandra: sus funciones más im­po­r­ta­n­tes

Al tratarse de un auténtico sistema di­s­tri­bui­do, Cassandra no usa un maestro. Todos los clústeres tienen el mismo rango y pueden procesar cualquier consulta de base de datos, lo que aumenta no­ta­ble­me­n­te la capacidad de re­n­di­mie­n­to. Los datos están di­s­tri­bui­dos en los nodos. El sistema es fá­ci­l­me­n­te escalable debido a que se pueden añadir más nodos de manera muy sencilla. Una vez realizada la in­s­ta­la­ción, ya solo tendrás que di­s­tri­buir los archivos de co­n­fi­gu­ra­ción entre los nuevos nodos. Cassandra ofrece he­rra­mie­n­tas propias para ello.

Para ga­ra­n­ti­zar una baja pro­ba­bi­li­dad de fallo y el re­s­ta­ble­ci­mie­n­to de los datos en caso de eme­r­ge­n­cia, Apache Cassandra cuenta con un sistema de re­pli­ca­ción ade­cua­da­me­n­te co­n­fi­gu­ra­do. La to­le­ra­n­cia de error se minimiza porque los datos se replican au­to­má­ti­ca­me­n­te entre los nodos. Los nodos averiados se pueden sustituir muy fá­ci­l­me­n­te. El sistema permanece di­s­po­ni­ble para consultas en todo momento.

Además, Cassandra ofrece una gran di­s­po­ni­bi­li­dad y to­le­ra­n­cia de partición. Según el CAP theorem de la in­fo­r­má­ti­ca, nunca es posible cumplir los criterios de co­n­si­s­te­n­cia (Co­n­si­s­te­n­cy), di­s­po­ni­bi­li­dad (Avai­la­bi­li­ty) y to­le­ra­n­cia de partición (Partition tolerance) a la vez. Por esta razón, la co­n­si­s­te­n­cia, es decir, el hecho de que todos los nodos vi­sua­li­cen los mismos datos en todo momento, tiene la menor prioridad en muchos sistemas de big data. Tras un fallo, la co­n­si­s­te­n­cia se puede recuperar re­la­ti­va­me­n­te rápido mediante el re­s­ta­ble­ci­mie­n­to de los datos, mientras que los otros dos criterios deben cumplirse en todo momento.

Las bases de datos de Cassandra son co­m­pa­ti­bles con el modelo de pro­gra­ma­ción de Google MapReduce para cálculos con grandes volúmenes de datos en sistemas di­s­tri­bui­dos. El lenguaje propio de consulta de base de datos CQL (Cassandra Query Language) está adaptado es­pe­cí­fi­ca­me­n­te a las es­tru­c­tu­ras de datos de Cassandra.

¿Qué ventajas ofrece Apache Cassandra?

Una de las ventajas más im­po­r­ta­n­tes de Cassandra es la buena es­ca­la­bi­li­dad en co­m­bi­na­ción con una pro­ba­bi­li­dad de fallo muy baja, dos co­n­di­cio­nes in­di­s­pe­n­sa­bles para las apli­ca­cio­nes de big data.

En el caso de Cassandra estamos ante una es­ca­la­bi­li­dad ho­ri­zo­n­tal, lo que significa que la capacidad y el re­n­di­mie­n­to del sistema se pueden aumentar mediante nodos adi­cio­na­les. En el caso opuesto, la escalada vertical, hay que equipar el servidor único de la base de datos con pro­ce­sa­do­res más potentes y discos duros más grandes si el re­n­di­mie­n­to o la capacidad ya no son su­fi­cie­n­tes para cumplir la demanda. La escalada ho­ri­zo­n­tal es la solución más barata en la mayoría de los casos, ya que se puede utilizar el hardware de servidor di­s­po­ni­ble en el mercado.

El modelo de datos de Cassandra se basa en las Hash Tables (tablas hash), tablas en las que cada fila tiene un número de­te­r­mi­na­do de columnas. A di­fe­re­n­cia de una tabla de base de datos clásica, estas columnas no tienen que ser idénticas en todas las filas. Además, en es­ce­na­rios de apli­ca­ción reales, Apache Cassandra destaca por su gran ventaja de velocidad frente a las demás bases de datos NoSQL.

¿Cuándo se usa Apache Cassandra?

Uno de los objetivos pri­n­ci­pa­les en el de­sa­rro­llo de Cassandra era conseguir una opción de búsqueda cómoda para ayudar a los usuarios de Facebook a buscar datos en sus bandejas de entrada más fá­ci­l­me­n­te. El gigante co­r­po­ra­ti­vo usó un clúster con más de 150 nodos in­di­vi­dua­les para lograrlo. No es ca­sua­li­dad que Cassandra, que tiene unas es­tru­c­tu­ras básicas muy parecidas a las de Amazon Dynamo y Google Bigtable, triunfe ac­tua­l­me­n­te entre los pro­vee­do­res de grandes redes sociales que requieren la in­te­r­co­ne­xión de grandes volúmenes de datos entre los usuarios. Algunos de los clientes más conocidos son Twitter, Instagram, Spotify, así como el sitio web Digg o el portal de noticias sociales Reddit.

Nota

Facebook cambió Cassandra por una creación propia compuesta por una co­m­bi­na­ción entre los sistemas de base de datos HBase y HDFS, ambos co­m­po­ne­n­tes del framework de Apache-Hadoop.

Hay otras redes con grandes volúmenes de datos que usan Cassandra como base de datos, ya sea como base de datos principal o como co­m­po­ne­n­te se­cu­n­da­rio para de­te­r­mi­na­das tareas. Algunos ejemplos serían eBay, GitHub, Netflix, The Weather Channel y el Large Hadron Collider de la Or­ga­ni­za­ción Europea para la In­ve­s­ti­ga­ción Nuclear CERN (sobre 30 000 terabytes de datos al año), entre otros. Apple tiene una de las mayores in­s­ta­la­cio­nes de Cassandra, la cual cuenta con 75 000 nodos.

Primeros pasos con Apache Cassandra

Apache Cassandra se ejecuta en sistemas similares a UNIX y, pre­fe­re­n­te­me­n­te, en se­r­vi­do­res Linux. El entorno de ejecución de Java (runtime) también es necesario ya que Cassandra está pro­gra­ma­da en Java. Los paquetes de in­s­ta­la­ción están di­s­po­ni­bles en los se­r­vi­do­res Apache como paquetes Debian o RPM. Para la in­s­ta­la­ción, debes añadir el re­po­si­to­rio co­rre­s­po­n­die­n­te. Tras la in­s­ta­la­ción, debes crear los típicos di­re­c­to­rios de datos, caché y protocolo, y co­n­fi­gu­rar­los en el archivo cassandra.yaml.

La ad­mi­ni­s­tra­ción de Cassandra se realiza mediante he­rra­mie­n­tas de líneas de comando propias. La más im­po­r­ta­n­te es la Shell de la Cassandra Query Language, cqlsh.

Con la siguiente orden accederás a una vista general de todos los comandos di­s­po­ni­bles:

cqlsh --help

El siguiente vídeo de YouTube te ofrece una guía visual y una clara in­tro­du­c­ción a Cassandra:

Consejo

DataStax ofrece OpsCenter, una he­rra­mie­n­ta web para la gestión y su­pe­r­vi­sión visual de sistemas Cassandra.

Ir al menú principal