paint-brush
Cassandra: base de datos altamente escalable lista para usarpor@therealone
1,380 lecturas
1,380 lecturas

Cassandra: base de datos altamente escalable lista para usar

por Denis Larionov9m2023/12/27
Read on Terminal Reader

Demasiado Largo; Para Leer

Este artículo proporciona una descripción general de Cassandra, una base de datos de columnas anchas altamente escalable y distribuida. Cassandra está diseñada para priorizar la disponibilidad y la tolerancia de partición, lo que la hace adecuada para aplicaciones donde la coherencia no es un requisito crítico. Admite operaciones de escritura más rápidas y de alto rendimiento.
featured image - Cassandra: base de datos altamente escalable lista para usar
Denis Larionov HackerNoon profile picture

Cassandra es una base de datos de columnas amplias distribuida, descentralizada, escalable y de alta disponibilidad.

En términos del teorema CAP, Cassandra significa AP (disponibilidad y tolerancia de partición).


diagrama de cassandra venn


Significa que Cassandra prefiere que todos los clientes puedan encontrar datos incluso en los casos en que no todos los nodos estén disponibles y que funcionen como se espera cuando se produzca una falla parcial de la red. Sin embargo, también significa que la coherencia de los datos puede verse comprometida a favor de la disponibilidad y la tolerancia de la partición: los usuarios verán los datos, pero pueden estar obsoletos por un tiempo.


Cassandra está diseñada para lograr un alto rendimiento y operaciones de escritura más rápidas.


Y es precisamente sacrificar la coherencia lo que permite a Cassandra tener una alta disponibilidad.

De forma predeterminada, Cassandra está diseñada para ser coherente en última instancia, lo que significa que es posible que no proporcione una coherencia sólida. Esto hace que Cassandra sea adecuada para aplicaciones donde la coherencia no es un requisito crítico. Sin embargo, es posible configurar Cassandra para proporcionar una coherencia sólida, aunque esto puede afectar al rendimiento.

Cassandra, al ser una base de datos NoSQL, no admite uniones de tablas, claves externas ni la capacidad de agregar columnas distintas a la clave principal en la cláusula WHERE durante la consulta. Estas limitaciones deben tenerse en cuenta antes de optar por utilizar Cassandra.

Casandra Bloques de construcción

  • Columna : una columna representa un par clave-valor y sirve como unidad fundamental de la estructura de datos.
  • Fila : actúa como contenedor de columnas a las que hace referencia la clave principal.
  • Espacio de claves : sirve como contenedor para tablas que abarcan uno o más nodos de Cassandra.
  • Clúster : un contenedor de espacios de claves dentro de Cassandra.
  • Nodo : se refiere a un sistema informático que ejecuta una instancia de Cassandra. Un nodo puede ser un host físico, una instancia de máquina en la nube o incluso un contenedor Docker.

Cómo almacena Cassandra los datos

Cassandra almacena los datos como una familia de columnas. Sirve como contenedor para columnas a las que hace referencia una clave principal.

¡Sí, lo hice!


Una fila de una familia de columnas incluye varias columnas con clave y valor, y la clave de fila sirve como clave principal:

Fila de familia de columnas


Una familia de columnas puede almacenar un conjunto diferente de columnas para cada clave de fila:

Almacenamiento de diferentes conjuntos de columnas

Cassandra no almacena columnas con valores nulos, lo que ayuda a ahorrar una cantidad significativa de espacio de almacenamiento.

¿Cuál es la clave principal en Cassandra?

La clave principal identifica de forma única cada fila de una tabla. En Cassandra, la clave principal tiene dos partes:

Clave primaria en Cassandra


En Cassandra, la clave de partición determina qué nodo almacena los datos, mientras que la clave de agrupación determina cómo se almacenan los datos dentro de un nodo. Por ejemplo, considere una mesa con un

PRIMARY KEY (city_id, event_id) . Esta clave principal consta de dos partes, representadas por dos columnas:


1. city_id sirve como clave de partición, lo que significa que los datos se dividirán según el campo city_id , lo que dará como resultado que todas las filas con el mismo city_id se almacenen en el mismo nodo.

2. event_id actúa como clave de agrupación. Dentro de cada nodo, los datos se organizan y almacenan en orden según la columna event_id .

Las claves de agrupación determinan la disposición de almacenamiento de datos dentro de un nodo. Es posible tener varias claves de agrupación y cualquier columna enumerada después de la clave de partición se denomina columna de agrupación. Las columnas de agrupación definen el orden en el que se organizan los datos en un nodo.

Claves de agrupación

Cada fila con clave de partición = "Paris" se almacenará en el mismo nodo, ordenada por el valor de la columna event_id.

Partición de datos lista para usar

Cassandra proporciona partición de datos basada en Consistent Hashing para reducir la latencia en las operaciones de lectura/escritura y aumentar el rendimiento del sistema cuando la cantidad de datos almacenados en la base de datos aumenta.


El particionador de Cassandra es responsable de decidir cómo se distribuyen los datos en el anillo Consistent Hash. Cuando se insertan datos en un clúster de Cassandra, el particionador aplica un algoritmo hash a la clave de partición . El resultado de este algoritmo hash determina el rango en el que se encuentran los datos y determina el nodo en el que se almacenarán los datos.

Particionador en Cassandra


Nodo coordinador

En Cassandra, cada nodo conoce las asignaciones de tokens de otros nodos a través del protocolo de chismes , lo que permite que cualquier nodo maneje solicitudes para el rango de cualquier otro nodo. Por lo tanto, un cliente puede conectarse a cualquier nodo para iniciar consultas de lectura o escritura.


El nodo que recibe la solicitud se conoce como coordinador y puede ser cualquier nodo del clúster. Si una clave no pertenece al rango del coordinador, la solicitud se reenvía a las réplicas responsables de ese rango.

Nodo Coordinador

Replicación

Cassandra replica datos en varios nodos para garantizar una alta disponibilidad. Cada nodo en Cassandra sirve como réplica de un rango de datos específico. Al distribuir varias copias de los datos entre diferentes réplicas, Cassandra permite que otras réplicas manejen consultas para ese rango de datos en caso de que un nodo no esté disponible. Dos configuraciones afectarán el proceso de replicación:

Replicación


El factor de replicación determina cuántos nodos almacenarán copias de los mismos datos. En un clúster con un factor de replicación de 3, cada fila se almacenará en tres nodos diferentes.

Cada espacio de claves en Cassandra puede tener un factor de replicación diferente.

En Cassandra, la primera réplica se asigna al nodo propietario del rango según el hash de la clave de partición. Luego, las réplicas restantes se colocan en nodos consecutivos en el sentido de las agujas del reloj. Cassandra utiliza dos estrategias de replicación para determinar qué nodos serán responsables de las réplicas:

Estrategia de replicación simple

En esta estrategia, la primera réplica se coloca en un nodo determinado por el particionador y las réplicas siguientes se colocan en los nodos siguientes en el sentido de las agujas del reloj.

Estrategia de replicación simple

Esta estrategia de replicación solo se aplica a un único clúster de centro de datos.

Estrategia de topología de red

Para garantizar la resiliencia contra la pérdida total de datos, se colocan réplicas adicionales dentro del mismo centro de datos moviéndose en el sentido de las agujas del reloj a lo largo del anillo hasta llegar al primer nodo en un centro de datos diferente. Esta disposición ayuda a mitigar el impacto de fallas simultáneas que normalmente ocurren dentro del mismo centro de datos debido a problemas de energía, refrigeración o red.

Estrategia de topología de red

Cuando se trata de configuraciones de múltiples centros de datos, se debe considerar la estrategia de topología de red. Este enfoque permite especificar diferentes factores de replicación para cada centro de datos, lo que permite controlar la cantidad de réplicas que se colocarán en cada ubicación específica.

Cuando usar Casandra

Cassandra se destaca en aplicaciones que requieren manejar grandes volúmenes de datos y priorizar la disponibilidad de los datos sobre la coherencia. Es muy adecuado para :


1. Aplicaciones de Internet de las cosas (IoT) : Cassandra es una opción ideal para entornos de IoT, ya que puede manejar cantidades masivas de datos generados por dispositivos y sensores. Su arquitectura distribuida permite la gestión de datos a gran escala y geográficamente dispersos.


2. Datos de series de tiempo : las aplicaciones que manejan datos de series de tiempo, como métricas, sistemas de monitoreo y datos de telemetría, se benefician de las eficientes operaciones de escritura y la escalabilidad horizontal de Cassandra. Estas capacidades son cruciales para almacenar y gestionar grandes volúmenes de datos con marca de tiempo.


3. Aplicaciones web y móviles : Cassandra ofrece acceso a datos de alto rendimiento y baja latencia, lo que la hace adecuada para plataformas web y móviles con grandes bases de usuarios que generan cantidades significativas de datos. Esto incluye plataformas de redes sociales, aplicaciones de juegos y sitios de comercio electrónico.


4. Análisis de big data en tiempo real : Cassandra admite el procesamiento de big data en tiempo real, lo que la convierte en una opción valiosa para aplicaciones que requieren información inmediata a partir de grandes conjuntos de datos. Los ejemplos incluyen motores de recomendación y sistemas de detección de fraude.


5. Almacenes de datos distribuidos : las empresas con grandes conjuntos de datos distribuidos pueden aprovechar Cassandra como solución de almacenamiento de datos. Su capacidad para replicar datos en múltiples centros de datos garantiza una alta disponibilidad y recuperación ante desastres.


6. Sistemas de mensajería : el alto rendimiento de escritura y lectura de Cassandra lo hace ideal para sistemas de mensajería que manejan grandes volúmenes de datos, como registros de eventos, pistas de auditoría o colas de mensajes.


7. Sistemas de gestión de contenido y personalización : las aplicaciones que requieren entrega de contenido personalizado a escala, como los sistemas de gestión de contenido, se benefician de la velocidad y escalabilidad de Cassandra para entregar contenido personalizado a una gran cantidad de usuarios simultáneamente.


8. Aplicaciones distribuidas geográficamente : el soporte de Cassandra para múltiples centros de datos la convierte en una excelente opción para aplicaciones que requieren datos distribuidos geográficamente. Garantiza un acceso a datos de baja latencia en diferentes regiones y proporciona una alta resiliencia.

Cuando no usar Cassandra

Si bien Apache Cassandra es potente y escalable, es posible que no sea adecuado para todas las aplicaciones o casos de uso. Es menos adecuado para aplicaciones con muchas transacciones, consultas complejas y escenarios que requieren una gran coherencia o cambios rápidos de esquema. Los sistemas tradicionales de gestión de bases de datos relacionales (RDBMS) u otras soluciones NoSQL pueden ser más apropiados en tales casos. Aquí hay varios escenarios en los que Cassandra podría no ser la opción óptima :


  1. Proyectos a pequeña escala : la complejidad y los requisitos de recursos de Cassandra pueden ser excesivos para proyectos o aplicaciones a pequeña escala con conjuntos de datos limitados. Las soluciones de bases de datos más simples pueden ofrecer una alternativa más rentable y manejable.


  2. Sistemas transaccionales que requieren propiedades ACID : Cassandra no es totalmente compatible con las propiedades ACID (atomicidad, consistencia, aislamiento y durabilidad). Si su aplicación requiere transacciones complejas que normalmente se encuentran en los sistemas bancarios o financieros, un RDBMS tradicional podría ser una mejor opción.


  3. Únase a consultas y agregaciones intensas : si su aplicación depende en gran medida de uniones, subconsultas o agregaciones complejas, es posible que Cassandra no sea la opción más adecuada. Está diseñado para escrituras y lecturas rápidas, pero no para procesamiento de consultas complejas.


  4. Datos con requisitos estrictos de coherencia : Cassandra proporciona coherencia eventual, lo que puede no ser adecuado para casos de uso que requieren una coherencia sólida para cada operación de lectura y escritura.


  5. Lecturas y escrituras de baja latencia en un solo clúster : si bien Cassandra funciona bien en entornos distribuidos de múltiples nodos, puede no ser la opción óptima para implementaciones de un solo nodo o de clústeres pequeños que requieren lecturas y escrituras de baja latencia.


  6. Blob Storage : Cassandra no está optimizada para almacenar objetos binarios grandes (blobs), como imágenes o vídeos. Otras soluciones de almacenamiento son más adecuadas para manejar eficientemente blobs grandes.


  7. Aplicaciones que requieren consultas ad hoc : las capacidades de consulta de Cassandra son limitadas en comparación con las bases de datos SQL completas. No es adecuado para aplicaciones que dependen en gran medida de consultas e informes ad hoc.

    En Cassandra, el diseño de tablas está estrechamente relacionado con la forma en que se accederá a los datos, enfatizando los patrones de consulta en lugar de centrarse únicamente en las relaciones entre entidades de datos. Esto difiere del enfoque de RDBMS, donde el diseño de esquemas se basa en principios de normalización.


  8. Evolución rápida del esquema : si su aplicación requiere cambios frecuentes en el esquema de la base de datos, la administración del esquema de Cassandra puede ser menos flexible en comparación con los sistemas RDBMS tradicionales u otras soluciones NoSQL.


  9. Aplicaciones de almacenamiento de datos que implican consultas complejas, uniones y análisis de datos históricos : si bien Cassandra es adecuada para cargas de trabajo con mucha escritura y acceso a datos en tiempo real, puede que no sea la opción más adecuada para escenarios de almacenamiento de datos que requieren consultas complejas. uniones y análisis de datos históricos.

Resumen

Este artículo proporciona una descripción general de Cassandra, una base de datos de columnas anchas altamente escalable y distribuida. Cassandra está diseñada para priorizar la disponibilidad y la tolerancia de partición, lo que la hace adecuada para aplicaciones donde la coherencia no es un requisito crítico. Admite operaciones de escritura más rápidas y de alto rendimiento.


Los componentes básicos de Cassandra incluyen columnas, filas, espacios de claves, clústeres y nodos. Las columnas representan pares clave-valor, las filas actúan como contenedores para las columnas a las que hace referencia la clave principal, los espacios clave sirven como contenedores para tablas que abarcan varios nodos, los clústeres contienen espacios clave y los nodos se refieren a sistemas informáticos que ejecutan instancias de Cassandra.


Cassandra almacena datos en familias de columnas, que son contenedores de columnas a las que hace referencia una clave principal. La partición de datos se logra mediante hash consistente, lo que permite reducir la latencia y aumentar el rendimiento. El particionador distribuye datos a través del anillo Consistent Hash y un nodo coordinador maneja consultas de lectura y escritura.


Cassandra proporciona replicación para alta disponibilidad. Las réplicas de datos se almacenan en varios nodos, lo que garantiza que las réplicas puedan manejar las consultas si un nodo deja de estar disponible. Los factores y estrategias de replicación determinan la cantidad de réplicas y los nodos responsables de ellas.


Si bien Cassandra ofrece beneficios como escalabilidad y alta disponibilidad, tiene limitaciones. No admite uniones de tablas, claves externas ni la capacidad de agregar columnas distintas de la clave principal en la cláusula WHERE durante la consulta.


En general, Cassandra es una poderosa solución de base de datos para aplicaciones altamente escalables, particularmente aquellas que priorizan la disponibilidad y la tolerancia de particiones sobre una fuerte consistencia.

Hay varios aspectos interesantes de Cassandra que cubriré en mi próximo artículo. Suscríbete para no perdértelo!

¡Salud!