Apache Cassandra - Apache Cassandra

Apache Cassandra
Logotipo de Cassandra
Autor (es) original (es) Avinash Lakshman, Prashant Malik / Facebook
Desarrollador (es) Fundación de software Apache
Versión inicial Julio de 2008 ; hace 13 años ( 2008-07 )
Lanzamiento estable
4.0.1  Edita esto en Wikidata / 7 de septiembre de 2021 ; Hace 36 días ( 7 de septiembre de 2021 )
Repositorio
Escrito en Java
Sistema operativo Multiplataforma
Disponible en inglés
Escribe Base de datos NoSQL , almacén de datos
Licencia Licencia Apache 2.0
Sitio web cassandra .apache .org Edita esto en Wikidata

Apache Cassandra es una de código abierto libre y , distribuido , tienda de toda la columna , NoSQL base de datos de sistema de gestión diseñado para manejar grandes cantidades de datos a través de muchos servidores de los productos básicos , proporcionando alta disponibilidad con ningún punto único de fallo . Cassandra ofrece soporte para clústeres que abarcan varios centros de datos, con replicación sin maestro asincrónica que permite operaciones de baja latencia para todos los clientes. Cassandra se diseñó para implementar una combinación de técnicas de replicación y almacenamiento distribuido Dynamo de Amazon combinadas con el modelo de motor de almacenamiento y datos Bigtable de Google .

Historia

Avinash Lakshman, uno de los autores de Dynamo de Amazon , y Prashant Malik desarrollaron inicialmente Cassandra en Facebook para impulsar la función de búsqueda en la bandeja de entrada de Facebook. Facebook lanzó Cassandra como un proyecto de código abierto en el código de Google en julio de 2008. En marzo de 2009 se convirtió en un proyecto de Apache Incubator . El 17 de febrero de 2010 pasó a ser un proyecto de alto nivel.

Los desarrolladores de Facebook nombraron su base de datos en honor al profeta mitológico troyano Cassandra , con alusiones clásicas a una maldición en un oráculo .

Lanzamientos

Los lanzamientos después de la graduación incluyen

  • 0.6, lanzada el 12 de abril de 2010, soporte agregado para almacenamiento en caché integrado y Apache Hadoop MapReduce
  • 0.7, lanzado el 8 de enero de 2011, índices secundarios agregados y cambios de esquema en línea
  • 0.8, lanzado el 2 de junio de 2011, agregó Cassandra Query Language (CQL), memtables de autoajuste y soporte para actualizaciones sin tiempo de inactividad
  • 1.0, lanzado el 17 de octubre de 2011, compresión integrada agregada, compactación nivelada y rendimiento de lectura mejorado
  • 1.1, lanzada el 23 de abril de 2012, se agregaron cachés de autoajuste, aislamiento de nivel de fila y compatibilidad con implementaciones mixtas de discos SSD / giratorios
  • 1.2, lanzada el 2 de enero de 2013, agrupación agregada en nodos virtuales, comunicación entre nodos, lotes atómicos y seguimiento de solicitudes
  • 2.0, lanzado el 4 de septiembre de 2013, transacciones ligeras agregadas (basadas en el protocolo de consenso de Paxos ), activadores, compactaciones mejoradas
  • 2.1 lanzado el 10 de septiembre de 2014
  • 2.2 publicada el 20 de julio de 2015
  • 3.0 lanzado el 11 de noviembre de 2015
  • Las versiones de la 3.1 a la 3.10 eran versiones mensuales que utilizaban un modelo de lanzamiento similar al tic-tac , con versiones pares que proporcionan nuevas funciones y correcciones de errores, mientras que las versiones impares solo incluirán correcciones de errores.
  • 3.11 lanzado el 23 de junio de 2017 como una serie de lanzamiento estable de 3.11 y corrección de errores de la última versión de la función tic-tac.
  • 4.0 lanzado el 26 de julio de 2021.
  • 4.0.1 lanzado el 7 de septiembre de 2021.
Versión Fecha de lanzamiento original Ultima versión Fecha de lanzamiento Estado
Versión antigua, ya no se mantiene: 0,6 2010-04-12 0.6.13 2011-04-18 Ya no es compatible
Versión antigua, ya no se mantiene: 0,7 2011-01-10 0.7.10 2011-10-31 Ya no es compatible
Versión antigua, ya no se mantiene: 0,8 2011-06-03 0.8.10 2012-02-13 Ya no es compatible
Versión antigua, ya no se mantiene: 1.0 2011-10-18 1.0.12 2012-10-04 Ya no es compatible
Versión antigua, ya no se mantiene: 1.1 2012-04-24 1.1.12 2013-05-27 Ya no es compatible
Versión antigua, ya no se mantiene: 1.2 2013-01-02 1.2.19 2014-09-18 Ya no es compatible
Versión antigua, ya no se mantiene: 2.0 2013-09-03 2.0.17 2015-09-21 Ya no es compatible
Versión antigua, ya no se mantiene: 2.1 2014-09-16 2.1.22 2020-08-31 Ya no es compatible
Versión anterior, pero aún se mantiene: 2.2 2015-07-20 2.2.19 2020-11-04 Aún soportado, solo arreglos críticos
Versión anterior, pero aún se mantiene: 3,0 2015-11-09 3.0.24 2021-02-28 Todavía es compatible
Versión anterior, pero aún se mantiene: 3.11 2017-06-23 3.11.10 2021-02-28 Todavía es compatible
Versión estable actual: 4.0 2021-07-26 4.0.1 2021-09-07 Último lanzamiento
Leyenda:
Versión antigua
Versión anterior, aún mantenida
Ultima versión
Última versión de vista previa
Lanzamiento futuro

Principales características

Repartido
Todos los nodos del clúster tienen la misma función. No hay un solo punto de falla. Los datos se distribuyen en todo el clúster (por lo que cada nodo contiene datos diferentes), pero no hay un maestro, ya que cada nodo puede atender cualquier solicitud.
Admite replicación y replicación de múltiples centros de datos
Las estrategias de replicación son configurables. Cassandra está diseñado como un sistema distribuido, para la implementación de una gran cantidad de nodos en múltiples centros de datos. Las características clave de la arquitectura distribuida de Cassandra están diseñadas específicamente para la implementación de varios centros de datos, para la redundancia, para la conmutación por error y la recuperación ante desastres.
Escalabilidad
Diseñado para que el rendimiento de lectura y escritura aumente linealmente a medida que se agregan nuevas máquinas, con el objetivo de que no haya tiempo de inactividad ni interrupción de las aplicaciones.
Tolerante a fallos
Los datos se replican automáticamente en múltiples nodos para tolerancia a fallas . Se admite la replicación en varios centros de datos. Los nodos fallidos se pueden reemplazar sin tiempo de inactividad.
Consistencia sintonizable
Cassandra generalmente se clasifica como un sistema AP , lo que significa que la disponibilidad y la tolerancia de partición generalmente se consideran más importantes que la consistencia en Cassandra. Las escrituras y lecturas ofrecen un nivel ajustable de consistencia , desde "las escrituras nunca fallan" hasta "bloquear para todas las réplicas deben ser legibles ", con el nivel de quórum en el medio.
Soporte MapReduce
Cassandra tiene integración con Hadoop , con soporte MapReduce . También hay soporte para Apache Pig y Apache Hive .
Lenguaje de consulta
Cassandra introdujo Cassandra Query Language (CQL). CQL es una interfaz simple para acceder a Cassandra, como alternativa al lenguaje de consulta estructurado (SQL) tradicional .
Consistencia eventual
Cassandra gestiona la coherencia eventual de las lecturas, las actualizaciones y las eliminaciones a través de Tombstones .

Lenguaje de consulta de Cassandra

Cassandra introdujo Cassandra Query Language (CQL). CQL es una interfaz simple para acceder a Cassandra, como alternativa al lenguaje de consulta estructurado (SQL) tradicional . CQL agrega 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. Los controladores de idioma están disponibles para Java (JDBC), Python (DBAPI2), Node.JS (Datastax), Go (gocql) y C ++.

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

CREATE KEYSPACE MyKeySpace
  WITH REPLICATION = { 'class' : 'SimpleStrategy', 'replication_factor' : 3 };

USE MyKeySpace;

CREATE COLUMNFAMILY MyColumns (id text, Last text, First text, PRIMARY KEY(id));

INSERT INTO MyColumns (id, Last, First) VALUES ('1', 'Doe', 'John');

SELECT * FROM MyColumns;

Lo que da:

 id | Last | First
----+------+------
  1 | Doe  | John

(1 rows)

Problemas conocidos

Hasta Cassandra 1.0, Cassandra no era coherente en el nivel de fila, lo que significa que las inserciones y actualizaciones en la tabla que afectan a la misma fila que se procesan aproximadamente al mismo tiempo pueden afectar las columnas que no son clave de formas inconsistentes. Una actualización puede afectar a una columna mientras que otra afecta a la otra, lo que da como resultado conjuntos de valores dentro de la fila que nunca se especificaron o pretendieron. Cassandra 1.1 resolvió este problema introduciendo el aislamiento a nivel de fila .

Lápidas

Se sabe que los marcadores de eliminación llamados "lápidas" causan una degradación grave del rendimiento.

Modelo de datos

Cassandra es un almacén de columnas amplias y, como tal, es esencialmente un híbrido entre un valor clave y un sistema de gestión de base de datos tabular. Su modelo de datos es un almacén de filas particionado con consistencia ajustable. Las filas se organizan en tablas ; el primer componente de la clave principal de una tabla es la clave de partición; dentro de una partición, las filas están agrupadas por las columnas restantes de la clave. Otras columnas se pueden indexar por separado de la clave principal.

Las tablas se pueden crear, eliminar y modificar en tiempo de ejecución sin bloquear las actualizaciones y las consultas.

Cassandra no puede realizar combinaciones ni subconsultas . Más bien, Cassandra enfatiza la desnormalización a través de características como colecciones.

Una familia de columnas (llamada "tabla" desde CQL 3) se asemeja a una tabla en un RDBMS (Sistema de gestión de bases de datos relacionales). Las familias de columnas contienen filas y columnas. Cada fila se identifica de forma única mediante una clave de fila. Cada fila tiene varias columnas, cada una de las cuales tiene un nombre, un valor y una marca de tiempo. A diferencia de una tabla en un RDBMS, las diferentes filas de la misma familia de columnas no tienen que compartir el mismo conjunto de columnas, y una columna se puede agregar a una o varias filas en cualquier momento.

Cada clave en Cassandra corresponde a un valor que es un objeto. Cada clave tiene valores como columnas y las columnas se agrupan en conjuntos llamados familias de columnas. Por tanto, cada clave identifica una fila de un número variable de elementos. Estas familias de columnas podrían considerarse entonces como tablas. Una tabla en Cassandra es un mapa multidimensional distribuido indexado por una clave. Además, las aplicaciones pueden especificar el orden de clasificación de las columnas dentro de una familia de Super Columna o Columna simple.

Gestión y seguimiento

Cassandra es un sistema basado en Java que se puede administrar y monitorear a través de Java Management Extensions (JMX). La utilidad nodetool compatible con JMX , por ejemplo, se puede utilizar para administrar un clúster de Cassandra (agregar nodos a un anillo, drenar nodos, retirar nodos, etc.). Nodetool también ofrece una serie de comandos para devolver métricas de Cassandra relacionadas con el uso del disco, la latencia, la compactación, la recolección de basura y más.

Desde Cassandra 2.0.2 en 2013, las medidas de varias métricas se producen a través del marco de métricas de Dropwizard, y se pueden consultar a través de JMX utilizando herramientas como JConsole o pasar a sistemas de monitoreo externos a través de complementos de informes compatibles con Dropwizard.

Aplicaciones notables

Según el ranking de DB-Engines , Cassandra es la tienda de columna ancha más popular , y en septiembre de 2014 se convirtió en la novena base de datos más popular.

  • Apple usa 100,000 nodos Cassandra, como se reveló en Cassandra Summit San Francisco 2015, aunque no ha elaborado para qué productos, servicios o características.
  • AppScale usa Cassandra como back-end para las aplicaciones de Google App Engine
  • BlackRock utiliza a Cassandra en su plataforma de gestión de inversiones Aladdin
  • CERN utilizó un prototipo basado en Cassandra para su experimento ATLAS para archivar la información de monitoreo del sistema DAQ en línea
  • Cisco 's WebEx utiliza Cassandra al usuario Tienda de la alimentación y la actividad en tiempo casi real.
  • Constant Contact utiliza Cassandra en sus aplicaciones de marketing por correo electrónico y redes sociales. Se implementan más de 200 nodos.
  • Digg , un sitio web de noticias sociales, anunció el 9 de septiembre de 2009 que está implementando el uso de Cassandra y lo confirmó el 8 de marzo de 2010. Desde entonces , TechCrunch ha vinculado a Cassandra con las críticas de confiabilidad de Digg v4 y las luchas recientes de la compañía. Un ingeniero principal de Digg luego reprendió estas críticas en una publicación en las redes sociales como una pista falsa y culpó a la falta de pruebas de carga.
  • Discord cambió a Cassandra para almacenar miles de millones de mensajes de MongoDB en noviembre de 2015
  • Formspring usa Cassandra para contar las respuestas, así como para almacenar datos de gráficos sociales (seguidores, seguidores, bloqueadores, bloqueo) para 26 millones de cuentas con 10 millones de respuestas al día.
  • Globo.com utiliza Cassandra como base de datos back-end para sus servicios de transmisión.
  • Grubhub usa Cassandra como su principal almacén de datos persistentes para sus servicios de backend.
  • Mahalo.com usó Cassandra para registrar los registros de actividad de los usuarios y los temas de su sitio web de preguntas y respuestas.
  • Monzo , un banco del Reino Unido, utiliza Cassandra para casi todo su almacenamiento de datos persistentes.
  • Netflix usa a Cassandra como su base de datos back-end para sus servicios de transmisión
  • Los dispositivos Nutanix utilizan Cassandra para almacenar metadatos y estadísticas.
  • Ooyala construyó un motor de análisis en tiempo real usando Cassandra
  • Openwave utiliza Cassandra como base de datos distribuida y como mecanismo de almacenamiento distribuido para su plataforma de mensajería.
  • OpenX está ejecutando más de 130 nodos en Cassandra para su producto OpenX Enterprise para almacenar y replicar anuncios y datos de orientación para la entrega de anuncios.
  • Rackspace usa Cassandra internamente.
  • Reddit cambió a Cassandra desde memcacheDB el 12 de marzo de 2010 y experimentó algunos problemas en mayo de ese año debido a la insuficiencia de nodos en su clúster.
  • RockYou utiliza Cassandra para registrar cada clic de 50 millones de usuarios activos mensuales en tiempo real para sus juegos en línea.
  • SoundCloud usa Cassandra para almacenar el tablero de sus usuarios
  • Uber usa Cassandra para almacenar alrededor de 10,000 características en su Tienda de características de toda la empresa actualizada diariamente para acceso de baja latencia durante las predicciones de modelos en vivo
  • Urban Airship utiliza Cassandra con el alojamiento de servicios móviles para más de 160 millones de instalaciones de aplicaciones en 80 millones de dispositivos únicos.

Ver también

Referencias

Bibliografía

enlaces externos