Articulo de referencia

Apache Cassandra

Apache Cassandra es un sistema de gestión de bases de datos gratuito y de código abierto diseñado para manejar grandes volúmenes de datos en múltiples servidores estándar . El s...

Apache Cassandra es un sistema de gestión de bases de datos gratuito y de código abierto diseñado para manejar grandes volúmenes de datos en múltiples servidores estándar . El sistema prioriza la disponibilidad y la escalabilidad sobre la consistencia , lo que lo hace particularmente adecuado para sistemas con altos requisitos de rendimiento de escritura debido a su capa de almacenamiento de indexación de árbol LSM . [ 2 ] Como base de datos de columnas anchas , Cassandra admite esquemas flexibles y maneja eficientemente modelos de datos con numerosas columnas dispersas. El sistema está optimizado para aplicaciones con patrones de acceso a datos bien definidos que se pueden incorporar al diseño del esquema. [ 2 ] Cassandra admite clústeres de computadoras que pueden abarcar múltiples centros de datos , [ 3 ] con replicación asíncrona y sin maestro. Permite operaciones de baja latencia para todos los clientes e incorpora las técnicas de almacenamiento y replicación distribuida Dynamo de Amazon , combinadas con el modelo de motor de almacenamiento de datos Bigtable de Google . [ 4 ]

Historia

Avinash Lakshman, coautor de Dynamo de Amazon , y Prashant Malik desarrollaron Cassandra en Facebook para dar soporte a la funcionalidad de búsqueda de la bandeja de entrada . Facebook lanzó Cassandra como software de código abierto en Google Code en julio de 2008. [ 5 ] En marzo de 2009, se convirtió en un proyecto de Apache Incubator [ 6 ] y el 17 de febrero de 2010, ascendió a un proyecto de nivel superior. [ 7 ]

Los desarrolladores de Facebook nombraron su base de datos en honor a Casandra , la profetisa troyana mitológica , haciendo referencia a su maldición de hacer profecías que nunca eran creídas. [ 8 ]

Características y limitaciones

Cassandra utiliza una arquitectura distribuida donde todos los nodos realizan funciones idénticas, eliminando así los puntos únicos de fallo. El sistema emplea estrategias de replicación configurables para distribuir los datos entre clústeres, proporcionando redundancia y capacidad de recuperación ante desastres. Además, cuenta con escalabilidad lineal, lo que incrementa el rendimiento de lectura y escritura al añadir nuevos nodos, manteniendo la continuidad del servicio.

Cassandra se clasifica como un sistema AP ( Disponibilidad y Tolerancia a Particiones), que prioriza la disponibilidad y la tolerancia a particiones sobre la consistencia . Si bien ofrece niveles de consistencia ajustables para operaciones de lectura y escritura, su arquitectura lo hace menos adecuado para casos de uso que requieren garantías de consistencia estrictas. [ 2 ] Además, la compatibilidad de Cassandra con Hadoop y herramientas relacionadas permite la integración con flujos de trabajo de procesamiento de big data existentes. La consistencia eventual se mantiene mediante marcadores de eliminación para gestionar lecturas, actualizaciones e inserciones.

Las capacidades de consulta del sistema presentan limitaciones notables. Cassandra no admite patrones de consulta avanzados como uniones de varias tablas , agregaciones ad hoc ni consultas complejas. [ 2 ] Estas limitaciones se derivan de su arquitectura distribuida, que prioriza la escalabilidad y la disponibilidad sobre las operaciones de consulta complejas.

Modelo de datos

Como almacén de columnas anchas , Cassandra combina características de los sistemas de bases de datos clave-valor y tabulares. Implementa un modelo de almacenamiento de filas particionadas con niveles de consistencia ajustables. [ 9 ] La siguiente tabla compara Cassandra con los sistemas de gestión de bases de datos relacionales (RDBMS).

El modelo de datos consta de varios componentes jerárquicos:

Espacio de claves

Un espacio de claves en Cassandra es análogo a una base de datos en sistemas relacionales . Contiene múltiples tablas y gestiona información de configuración, incluyendo la estrategia de replicación y los tipos definidos por el usuario (UDT). [ 2 ]

Tablas

Las tablas (anteriormente llamadas familias de columnas antes de CQL 3) son contenedores de filas de datos. Cada tabla tiene un nombre e información de configuración para los datos que almacena. Las tablas se pueden crear, eliminar o modificar en tiempo de ejecución sin bloquear las actualizaciones ni las consultas. [ 10 ]

Filas y columnas

Cada fila se identifica mediante una clave primaria y contiene columnas. El primer componente de la clave primaria de una tabla es la clave de partición; dentro de una partición, las filas se agrupan según las columnas restantes de la clave. [ 11 ]

Las columnas contienen datos pertenecientes a una fila y constan de:

  • Un nombre
  • Un tipo
  • Un valor
  • Metadatos de marca de tiempo (utilizados para la resolución de conflictos de escritura mediante el método "la última escritura gana")

A diferencia de las tablas de los sistemas de gestión de bases de datos relacionales (RDBMS) tradicionales, las filas dentro de la misma tabla pueden tener columnas variables, lo que proporciona una estructura flexible. Esta flexibilidad distingue a Cassandra de las bases de datos relacionales, ya que no es necesario especificar todas las columnas para cada fila. [ 2 ] Otras columnas pueden indexarse ​​por separado de la clave primaria. [ 12 ]

Modelo de almacenamiento

Cassandra utiliza un índice de árbol de fusión estructurado por registros (árbol LSM) para optimizar el rendimiento de escritura, a diferencia de los índices de árbol B utilizados por la mayoría de las bases de datos. [ 2 ]

La arquitectura de almacenamiento consta de tres componentes principales: [ 2 ]

Componentes principales

Procesos de escritura y lectura

Las operaciones de escritura siguen un proceso de dos etapas:

  1. La escritura se registra en el registro de confirmación y se agrega a la Memtable.
  2. Cuando la Memtable alcanza umbrales de tamaño o tiempo, se vacía en una SSTable.

Operaciones de lectura:

  1. Consulta Memtable para obtener los datos más recientes.
  2. Busque archivos SSTable desde el más reciente al más antiguo utilizando filtros Bloom para mayor eficiencia.

Gestión de datos

Lápidas

Cada operación (crear/actualizar/eliminar) genera una nueva entrada, y las eliminaciones se gestionan mediante " marcadores de eliminación ". Si bien son comunes en muchas bases de datos, los marcadores de eliminación pueden provocar una degradación del rendimiento en cargas de trabajo con muchas eliminaciones. [ 13 ]

Compactación

La compactación consolida múltiples SSTables en:

  • Reducir el uso de almacenamiento
  • Eliminar marcadores de filas eliminadas
  • Mejorar el rendimiento de lectura

Lenguaje de consulta de Cassandra

Cassandra Query Language (CQL) es la interfaz para acceder a Cassandra, como alternativa al tradicional Structured Query Language (SQL). CQL añade una capa de abstracción que oculta los detalles de implementación de esta estructura y proporciona sintaxis nativas para colecciones y otras codificaciones comunes. Hay controladores de lenguaje disponibles para Java ( JDBC ), Python (DBAPI2), Node.js ( DataStax ), Go (gocql) y C++ . [ 14 ]

El espacio de claves en Cassandra es un espacio de nombres que define la replicación de datos entre nodos. Por lo tanto, la replicación se define a nivel del espacio de claves. A continuación se muestra un ejemplo de creación de un espacio de claves, incluyendo una familia de columnas en CQL 3.0: [ 15 ]

CREAR ESPACIO DE CLAVES MiEspacioDeClavesCON REPLICACIÓN = { 'class' : 'SimpleStrategy' , 'replication_factor' : 3 } ;USE MyKeySpace ;CREATE COLUMNFAMILY MyColumns ( id texto , apellido texto , nombre texto , PRIMARY KEY ( id ));INSERTAR EN MyColumns ( id , apellido , nombre ) VALORES ( '1' , 'Doe' , 'John' );SELECCIONAR * DE MisColumnas ;

Lo que da como resultado:

id | apellido | nombre ----+----------+---------- 1 | Doe | John (1 fila) 

Arquitectura distribuida

Protocolo de chismes

Cassandra utiliza un protocolo de comunicación entre pares (gossip) para la comunicación del clúster. Los nodos intercambian información sobre el estado del clúster de forma rutinaria, incluyendo:

  • estado de disponibilidad del nodo
  • Versiones de esquema
  • Marcas de tiempo de generación (tiempo de arranque del nodo)
  • Números de versión (valores lógicos del reloj)

El sistema utiliza relojes vectoriales para rastrear la vigencia de la información e ignorar los datos de estado obsoletos. [ 2 ]

Nodos semilla

La arquitectura designa ciertos nodos como nodos "semilla" que:

  • Inicializar el clúster
  • Sirven como puntos de comunicación de chismes garantizados
  • Evitar la fragmentación del clúster
  • Permanecer detectable mediante métodos de descubrimiento de servicios.

Este diseño elimina los puntos únicos de fallo al tiempo que mantiene la coherencia del conocimiento operativo en todo el clúster. [ 2 ]

Tolerancia a fallos

Cassandra emplea el detector de fallos de acumulación Phi para gestionar los fallos de los nodos durante el funcionamiento del clúster. [ 16 ] Mediante este sistema, cada nodo evalúa de forma independiente la disponibilidad de los demás nodos durante la comunicación gossip. Cuando un nodo no responde, se le "condena" y se le excluye de las operaciones de escritura, aunque puede volver a unirse al clúster al reanudar las señales de latido. [ 2 ]

Para mantener la integridad de los datos durante las interrupciones de los nodos, Cassandra utiliza un mecanismo de "entrega con sugerencia". Al escribir en un nodo fuera de línea, el nodo coordinador almacena temporalmente los datos de escritura como una "sugerencia". Una vez que el nodo fuera de línea vuelve a estar operativo, estas sugerencias se reenvían para restaurar la coherencia de los datos. Cabe destacar que Cassandra solo elimina permanentemente los nodos mediante la desactivación o reconstrucción administrativa explícita, lo que evita que las fallas de comunicación temporales o los reinicios desencadenen un reequilibrio de datos innecesario. [ 2 ]

Gestión y seguimiento

Cassandra es un sistema basado en Java que se puede gestionar y monitorizar mediante Java Management Extensions (JMX). La utilidad Nodetool , compatible con JMX , por ejemplo, se puede utilizar para gestionar un clúster de Cassandra. [ 17 ] Nodetool también ofrece varios comandos para obtener métricas de Cassandra relacionadas con el uso del disco, la latencia, la compactación, la recolección de basura y más. [ 18 ]

Desde el lanzamiento de Cassandra 2.0.2 en 2013, las medidas de varias métricas se producen a través del marco de métricas Dropwizard, [ 19 ] y se pueden consultar a través de JMX usando herramientas como JConsole o pasar a sistemas de monitoreo externos a través de complementos de reporteros compatibles con Dropwizard. [ 20 ]

Comunicados

Los lanzamientos posteriores a la graduación incluyen:

Véase también

Referencias

  1. https://github.com/apache/cassandra/releases/tag/cassandra-5.0.8 . Consultado el 5 de mayo de 2026 .{{cite web}}: Falta o está vacío |title=( ayuda )
  2. 1 2 3 4 5 6 7 8 9 10 11 12 Carpintero, Jeff; Hewitt, Eben (2022). Cassandra: la guía definitiva (3ª ed.). Medios O'Reilly . ISBN  978-1-4920-9710-5.
  3. Casares, Joaquín (5 de noviembre de 2012). "Replicación en múltiples centros de datos en Cassandra" . DataStax . Consultado el 25 de julio de 2013. Los conceptos inherentes de centro de datos de Cassandra son importantes , ya que permiten ejecutar múltiples cargas de trabajo en varios centros de datos...
  4. "Descripción general de la documentación de Apache Cassandra" . Consultado el 21 de enero de 2021 .
  5. Hamilton, James (12 de julio de 2008). "Facebook lanza Cassandra como código abierto" . Recuperado el 4 de junio de 2009 .
  6. "¿Es esta la nueva moda?" . Mail-archive.com. 2 de marzo de 2009. Archivado del original el 25 de abril de 2010. Consultado el 29 de marzo de 2010 .
  7. "Cassandra es un proyecto de nivel superior de Apache" . Mail-archive.com. 18 de febrero de 2010. Archivado del original el 28 de marzo de 2010. Recuperado el 29 de marzo de 2010 .
  8. "El significado del nombre de Apache Cassandra" . Archivado del original el 1 de noviembre de 2016. Recuperado el 19 de julio de 2016. Apache Cassandra recibe su nombre de la profetisa mitológica griega Casandra . [...] Debido a su belleza, Apolo le otorgó la capacidad de profetizar. [...] Cuando Casandra de Troya rechazó a Apolo, este la maldijo para que ninguna de sus predicciones ni las de sus descendientes fueran creídas. [...] Casandra es el Oráculo maldito.
  9. DataStax (15 de enero de 2013). "Acerca de la consistencia de los datos" . Archivado del original el 26 de julio de 2013. Recuperado el 25 de julio de 2013 .
  10. Ellis, Jonathan (2 de marzo de 2012). "El renacimiento de la gestión de esquemas en Cassandra 1.1" . DataStax . Recuperado el 25 de julio de 2013 .
  11. Ellis, Jonathan (15 de febrero de 2012). "Esquema en Cassandra 1.1" . DataStax . Recuperado el 25 de julio de 2013 .
  12. Ellis, Jonathan (3 de diciembre de 2010). "Novedades de Cassandra 0.7: Índices secundarios" . DataStax . Consultado el 25 de julio de 2013 .
  13. Rodríguez, Alain (27 de julio de 2016). "Acerca de las eliminaciones y las lápidas en Cassandra" .
  14. "Controlador DataStax C/C++ para Apache Cassandra" . DataStax . Consultado el 15 de diciembre de 2014 .
  15. "CQL" . Archivado del original el 13 de enero de 2016. Consultado el 5 de enero de 2016 .
  16. ^ Hayashibara, Naohiro; Défago, Xavier; Yared, Rami; Katayama, Takuya (2004). "El detector de fallos de acumulación Φ". Simposio IEEE sobre sistemas distribuidos confiables . págs. 66 a 78. doi : 10.1109/RELDIS.2004.1353004 . 
  17. "NodeTool" . Wiki de Cassandra . Archivado del original el 13 de enero de 2016. Consultado el 5 de enero de 2016 .
  18. "Cómo monitorizar las métricas de rendimiento de Cassandra" . Datadog. 3 de diciembre de 2015. Consultado el 5 de enero de 2016 .
  19. "Métricas" . Wiki de Cassandra . Archivado del original el 12 de noviembre de 2015. Consultado el 5 de enero de 2016 .
  20. "Monitorización" . Documentación de Cassandra . Consultado el 1 de febrero de 2018 .
  21. "Versiones del servidor Cassandra" . cassandra.apache.org . Consultado el 15 de diciembre de 2015 .

Bibliografía

  • Carpintero, Jeff; Hewitt, Eben (23 de enero de 2022). Cassandra: la guía definitiva (3ª  ed.). Medios O'Reilly . pag.  432.ISBN 978-1-4920-9710-5.
  • Capriolo, Edward (15 de julio de 2011). Cassandra High Performance Cookbook (1.ª  ed.). Packt Publishing . pág.  324. ISBN 978-1-84951-512-2.
  • Hewitt, Eben (15 de diciembre de 2010). Cassandra: La guía definitiva (1.ª  ed.). O'Reilly Media . pág.  300. ISBN 978-1-4493-9041-9.
  • Lakshman, Avinash (25 de agosto de 2008). "Cassandra: un sistema de almacenamiento estructurado en una red P2P" . Notas de ingeniería de Facebook . Recuperado el 17 de junio de 2014 .
  • "El proyecto Apache Cassandra" . Forest Hill, MD, EE. UU.: The Apache Software Foundation . Consultado el 17 de junio de 2014 .
  • "Proyecto Wiki" . Forest Hill, MD, EE. UU.: The Apache Software Foundation . Archivado del original el 14 de junio de 2014. Consultado el 17 de junio de 2014 .
  • Hewitt, Eben (1 de diciembre de 2010). "Adoptando Apache Cassandra" . infoq.com . InfoQ, C4Media Inc. Recuperado el 17 de junio de 2014 .
  • Lakshman, Avinash; Malik, Prashant (15 de agosto de 2009). "Cassandra: un sistema de almacenamiento estructurado descentralizado" (PDF) . cs.cornell.edu . Los autores son de Facebook . Recuperado el 17 de junio de 2014 .
  • Ellis, Jonathan (29 de julio de 2009). "Lo que todo desarrollador debería saber sobre la escalabilidad de bases de datos" . slideshare.net . Recuperado el 17 de junio de 2014 .De la charla de OSCON 2009 sobre RDBMS frente a Dynamo, Bigtable y Cassandra.
  • "Cassandra-RPM - Compilación de Red Hat Package Manager (RPM) para el proyecto Apache Cassandra" . code.google.com . Menlo Park, CA, EE. UU.: Google Project Hosting . Consultado el 17 de junio de 2014 .
  • Roth, Gregor (14 de octubre de 2012). "Cassandra con ejemplos: la ruta de las solicitudes de lectura y escritura" . slideshare.net . Recuperado el 17 de junio de 2014 .
  • Mansoor, Umer (4 de noviembre de 2012). "Una colección de tutoriales de Cassandra" . Recuperado el 8 de febrero de 2015 .
  • Bushik, Sergey (22 de octubre de 2012). "Una comparación independiente del proveedor de bases de datos NoSQL: Cassandra, HBase, MongoDB, Riak" . NetworkWorld . Framingham, MA, EE. UU. y Staines, Middlesex, Reino Unido: IDG . Archivado del original el 28 de mayo de 2014. Recuperado el 17 de junio de 2014 .
  • "Propiedades del sistema Apache Cassandra" . DB-Engines . Consultado el 28 de mayo de 2025 .