Apache Cassandra se trata de un software NoSQL distribuido y basado en un modelo de almacenamiento «tabular», de código abierto que está escrito en Java. Permite grandes volúmenes de datos en forma distribuida. Por ejemplo, lo usa X para su plataforma. Su objetivo principal es la escalabilidad lineal y la disponibilidad. La arquitectura distribudores de Cassandra está basada en una serie de nodos iguales que se comunican con un protocolo P2P con lo que la redundancia es máxima. Esta soportada por la Apache Software Fundation.
Cassandra se basa en una arquitectura distribuida que permite replicar los datos en múltiples nodos, proporcionando tolerancia a fallos y garantizando que los datos permanezcan disponibles incluso en caso de fallos de hardware o de red. Está diseñado para manejar datos estructurados y semi-estructurados, con soporte para una amplia gama de tipos de datos, incluyendo cadenas, enteros, flotantes, marcas de tiempo y UUID.
Cassandra ofrece soporte robusto para múltiples Centros de datos, con replicación asincrónica sin necesidad de un servidor maestro, lo que permiten operaciones de baja latencia para todos los clientes.
Debido a que es una base de datos distribuida, Cassandra funciona con múltiples nodos, en donde cada uno representa una instancia de Cassandra. Estos nodos se comunican los unos con los otros mediante un protocolo llamado gossip (chisme), el cual es un proceso de comunicación de tipo peer-to-peer. A su vez funciona como una malla de tipo anillo, en donde no hay maestro y trabajadores, es decir cada nodo tiene la misma funcionalidad y capacidades que los demás, lo cual contribuye a que Cassandra sea más robusta y tenga mejor resiliencia.
Otro beneficio en cuanto al uso de Cassandra es su capacidad de escalabilidad, ya que permite que los desarrolladores escalen o incluso encojan su base de datos de forma dinámica sin necesidad de interrumpir el sistema.
Cassandra también ofrece un gran rendimiento. En 2012, investigadores de la Universidad de Toronto que estudian los sistemas NoSQL concluyeron que "En términos de escalabilidad, hay un claro ganador a través de nuestros experimentos. Cassandra logra el más alto rendimiento para el número máximo de nodos en todos los experimentos", aunque "esto tiene como precio una alta latencia de escritura y lectura".
El modelo de datos de Cassandra consiste en particionar las filas, que son reorganizadas en tablas . Las claves primarias de cada tabla tiene un primer componente que es la clave de partición. Dentro de una partición, las filas son agrupadas por las columnas restantes de la clave. Las demás columnas pueden ser indexadas por separado de la clave primaria.
Las tablas se pueden crear, eliminar y alterar en tiempo de ejecución sin bloquear actualizaciones y consultas.
Cassandra no soporta la sentencia JOIN o subqueries, sino que enfatiza en la desnormalización a través de características como colecciones.
En las versiones iniciales utilizaba un API propia para poder acceder a la base de datos. En los últimos tiempos están apostando por un lenguaje denominado CQL (Cassandra Query Language, no confundir con Contextual Query Language) que posee una sintaxis similar a SQL aunque con muchas menos funcionalidades. Esto hace que iniciarse en el uso de la misma sea más sencillo. Permite acceder en Java desde JDBC.
Historia Apache Cassandra fue inicialmente desarrollada en Facebook para impulsar las búsqueda en la bandeja de entrada por Avinash Lakshman (uno de los autores de Amazon's Dynamo) y Prashant Malik. Fue lanzada como un proyecto open source de Google code en julio de 2008. En marzo de 2009, se transformó en un proyecto de Apache Incubator. El 17 de febrero de 2010 se graduó como un proyecto de alto nivel.
Publicaciones después de la graduación:
0.6, 12 de abril de 2010, añaden soporte para cacheo integrado y para Apache Hadoop MapReduceThe Apache Software Foundation Announces Apache Cassandra Release 0.6 : The Apache Software Foundation Blog 0.7, 8 de enero de 2011, añaden índices secundarios y cambios en línea en el "scheme" de la base de datosThe Apache Software Foundation Announces Apache Cassandra 0.7 : The Apache Software Foundation Blog 0.8, 2 de junio de 2011, añaden el Cassandra Query Language (CQL), "self-tuning memtables", y soporte para mantenerse funcionando durante actualizaciones de versión [Cassandra-user] [RELEASE] 0.8.0 - Grokbase 1.0, 17 de octubre de 2011, añaden compresión integrada, compactación por niveles y se mejora el desempeño de lecturaCassandra 1.0.0. Is Ready for the Enterprise 1.1, 23 de abril de 2012, añaden caché "self-tuning", aislamiento a nivel de fila y soporte para desarrollo en múltiples sistemas de discoThe Apache Software Foundation Announces Apache Cassandra™ v1.1 : The Apache Software Foundation Blog 1.2, 2 de enero de 2013, añaden clustering a través de nodos virtuales, comunicación entre nodos, procesos "batch" atómicos y traza de solicitudes 2.0, 4 de septiembre de 2013, añaden transacciones livianas (basadas en el protocolo Paxos), triggers, y compactaciones improvisadas. 2.0.4, 30 de diciembre de 2013, añaden la especificación de los centros de datos para participar en una reparación, soporte de encriptación del cliente para el "sstableloader" y remover snapshots que no existen más. 2.1.0 10 de septiembre de 2014 2.1.5 29 de abril de 2015 2.1.6 nueva versión 8 de junio de 2015 2.1.7 nueva versión 22 de junio de 2015 2.2.0 nueva versión 20 de julio de 2015 2.2.2 nueva versión 5 de octubre de 2015 3.0 nueva versión y luego se comienzan a realizar liberaciones mensualmente usando el tick-tock model. 3.2.2 nueva versión 18 de enero de 2016 3.7 nueva versión 13 de junio de 2016 3.11.1 nueva versión 10 de octubre de 2017 5.0 nueva version 5 de septirmbre de 2024
Versión Fecha liberación original Última versión Fecha liberación Estado 0.6 2010-04-12 0.6.13 2011-04-18 Ya no tiene soporte 0.7 2011-01-10 0.7.10 2011-10-31 Ya no tiene soporte 0.8 2011-06-03 0.8.10 2012-02-13 Ya no tiene soporte 1.0 2011-10-18 1.0.12 2012-10-04 Ya no tiene soporte 1.1 2012-04-24 1.1.12 2013-05-27 Ya no tiene soporte 1.2 2013-01-02 1.2.19 2014-09-18 Ya no tiene soporte 2.0 2013-09-03 2.0.17 2015-09-21 Ya no tiene soporte 2.1 2014-09-16 2.1.13 2016-02-08 Ya no tiene soporte 2.2 2015-07-20 2.2.5 2016-02-08 Ya no tiene soporte 3.0 2015-11-09 3.0.5 2016-04-11 Ya no tiene soporte 3.2 2015-11-09 3.2.1 2016-01-18 Ya no tiene soporte 3.7 2016-06-13 3.7 2016-06-13 Ya no tiene soporte 3.11 2017-06-23 3.11.7 2020-07-25 Ya no tiene soporte5.02024-09-055.02024-09-05Última liberación
Características principales
Descentralizado Todos los nodos del clúster tiene el mismo rol. No hay un único punto de fallo. Los datos se distribuyen a través del clúster (por lo que cada nodo contiene datos diferentes). No existe un nodo maestro por lo que cada nodo puede dar servicio a cualquier solicitud.
Soporta replicación y replicación de múltiples data center Las estrategias de replicación son configurables . Cassandra está diseñado como un sistema distribuido, para el despliegue de un gran número de nodos a través de múltiples centros de datos. La arquitectura distribuida de Cassandra está diseñado para desplegarse sobre múltiples data center, tener redundancia y recuperarse ante desastres.
Escalabilidad El rendimiento de leer y escribir aumenta linealmente a medida que se añaden nuevos nodos. Se pueden agregar nuevos nodos sin necesidad de interrumpir la ejecución de la aplicación.
Tolerancia a fallos Los datos se replican automáticamente a múltiples nodos para recuperarse frente a fallos. Cassandra soporta replicación a través de múltiples datacenter. Se puede reemplazar nodos que presenten fallos sin tiempo de inactividad o interrupción de la aplicación.
Consistencia Se ofrece la elección del nivel de consistencia para las lecturas y escrituras. Un ejemplo posible de consulta utilizando consistencia es el siguiente: SELECT * FROM users WHERE state='TX' USING CONSISTENCY QUORUM; +LecturaNivelDescripciónONERetorna una respuesta de la réplica más cercana.QUORUMRetorna la grabación con la fecha de creación más reciente en el quorum de réplicas de respuesta.LOCAL_QUORUMRetorna la grabación con la fecha de creación más reciente en el quorum de réplicas que se encuentran en el mismo nodo que el nodo coordinador solicitante. Evita el retardo de comunicación entre data-centers.EACH_QUORUMRetorna la grabación con la fecha de creación más reciente en el quorum de réplicas de cada data-cetner del clúster que responda.ALLRetorna la grabación con la fecha de creación más reciente de todas las réplicas que respondan. Fallará si alguna réplica no responde. +EscrituraNivelDescripciónANYUna escritura debe ser realizada en al menos un nodo.ONEUna escritura debe ser escrita en el Commit Log y MemTable de al menos un nodo de replicación.QUORUMUna escritura debe ser escrita en el Commit Log y MemTable en un quorum de nodos de réplicaLOCAL_QUORUMUna escritura debe ser escrita en el Commit Log y MemTable en un quorum de nodos de réplica en el mismo data-center que el nodo coordinador. Evita el retardo de comunicación entre data-centers.EACH_QUORUMUna escritura debe ser escrita en el Commit Log y MemTable en un quorum de nodos de réplica en todos los data-centers.ALLUna escritura debe ser escrita en el Commit Log y MemTable en todos las réplicas de nodos en el clúster para esa clave de fila.
Soporte MapReduce Cassandra está integrado con Apache Hadoop para soportar MapReduce. También existe soporte para Apache Pig y Apache Hive."Hadoop Support" article on Cassandra's wiki
Lenguaje de consulta Cassandra introduce CQL (Cassandra Query Language), una alternativa similar a SQL para la interfaz RPC tradicional. Existen drivers disponibles para Java (JDBC), Python (DBAPI2), Node.JS (Helenus), Go (gocql) y C++.
Ejemplo de creación de un keyspace, incluyendo una columna en CQL 3.0:CREATE KEYSPACE MiEspacioClaves WITH REPLICATION = { 'class' : 'SimpleStrategy', 'replication_factor' : 3 };
USE MiEspacioClaves;
CREATE COLUMNFAMILY MisColumnas (id text, Apellido text, Nombre text, PRIMARY KEY(id));
INSERT INTO MisColumnas (id, Apellido, Nombre) VALUES ('1', 'Perez', 'Juan');
SELECT * FROM MisColumnas;Resultado: id | nombre | apellido ----+--------+--------- 1 | Juan | Perez
(1 fila)
Sistema de archivos En la actualidad, Cassandra es compatible con HDFS (Hadoop Distributed File System), sin embargo, DataStax que es la compañía que da soporte y distribuye a Apache Cassandra a través de contribuciones abiertas, creó Cassandra File System (CFS) que tiene como objetivo ser el reemplazo de HDFS. Las principales diferencias se encuentran en los daemons llamados "Nombre de Nodo", "Nombre de Nodo Secundario" y "Nodo de Datos". El motivo de este cambio es hacer más fácil el manejo de archivos en Cassandra.
Las principales ventajas de CFS son:
• Maneja una arquitectura distribuida.
• Ideal para volúmenes masivos de información, separados en conjuntos de tamaño reducido.
• Los archivos que se manejen en Cassandra, se almacenarán en varios nodos para prevenir posibles fallas o pérdidas de información.
• Es compatible con otras herramientas, como MapReduce, Apache Spark que permiten trabajar el Big Data.
• Dentro del teorema de CAP, ofrece disponibilidad (A) y tolerancia a particiones (P).
Entonces, en general, Cassandra File System no es ideal para manejar grandes volúmenes de información en conjuntos grandes, sino en conjuntos pequeños. Y por otro lado, es excelente para datos almacenados de manera estructurada.
CFS Read Path