Apache Cassandra: Introducción

Última actualización: 13/04/2024 – Oscar Fernandez

En esta introducción vamos a presentar qué es Apache Cassandra, qué particularidades tiene para almacenar y distribuir datos masivos (Big Data). Consideraremos su consistencia y disponibilidad y en qué escenarios son apropiados, junto con algunos casos de uso.

Introduccion Apache Cassandra

¿Qué es Apache Cassandra?

Apache Cassandra es una base de datos NoSQL que usa tablas, filas y columnas, pero el nombre y el formato de las columnas puede variar en cada fila de una misma tabla (algo que no ocurre en bases de datos relacionales). Esta particularidad también se puede llamar almacenamiento con clave-valor de dos dimensiones.

Es una solución open source distribuida, diseñada para almacenar grandes cantidades de datos proporcionando una alta disponibilidad sin un único punto de fallo. Es posible desplegarla en la nube, on premise o en un entorno híbrido.

Apache Cassandra fue diseñada originalmente para realizar búsquedas en Facebook y hoy en día se encuentra en uso por muchas organizaciones. Es una base de datos preparada para gestionar datos variables pero semi-estructurados, como sensores o aplicaciones conectadas y realizar análisis, monitorización y logging de eventos cuando es necesaria una alta velocidad de escritura.

Distribución de datos en Apache Cassandra

Para distribuir los datos, se usa un modelo peer-to-peer basado en claves de partición. Para determinar qué nodo contiene el dato que se está buscando, Cassandra usa tokens. Un token es un entero de 64 bits, y cada nodo del clúster tiene asignado un rango de tokens. De esta forma, al buscar una fila, Cassandra calcula el token asociado (con una función Hash), y con ello determina de forma única el nodo al que pertenece.

Al añadir más nodos a un clúster o al eliminar nodos se deben redistribuir los tokens asignados a cada uno de los nodos presentes. En Cassandra, todos los nodos se crean iguales. A diferencia de las soluciones con un modelo cliente-servidor, que pueden contener puntos únicos de fallo, la arquitectura de Cassandra distribuye los datos en múltiples nodos en el clúster.

Cassandra también se encarga de replicar los datos a distintos nodos para garantizar la tolerancia a fallos y una alta disponibilidad. El factor de replicación (RF) representa el número de nodos que se usan para almacenar cada dato. La configuración estándar es usar un factor de replicación de 3.

Modelo de Datos

Cassandra usa CQL (Cassandra Query Language). Es un dialecto de SQL para definir y manipular los datos. Entre las características más importantes se encuentra que Cassandra no soporta operaciones de tipo JOIN.

El esquema para las tablas (o familias de columnas) de Cassandra debe estar diseñado teniendo en mente las consultas que se van a realizar.

Para conseguir una velocidad de escritura elevada, también hace uso de unas estructuras en memoria llamadas memtables. Sobre estas estructuras volátiles se realizan las escrituras de datos y una vez que se llenan se realiza el volcado a disco. En paralelo, también se escribe en el commit log (que es persistente) y de esta forma se evita la pérdida de datos.

Consistencia en Apache Cassandra

Cassandra permite ajustar la disponibilidad y la consistencia de los datos configurando las propiedades «replication factor» y «consistency level». Por ejemplo, si ajustamos el nivel de consistencia en 3 en un cluster con 3 nodos, se necesitaría que los 3 nodos tengan consenso para tener el dato disponible.

El nivel de consistencia se define por consulta y permite ajustar el momento en el que se ofrece el resultado a los clientes. Por otro lado, el factor de replicación se asegura de que las escrituras se envíen a todas las réplicas. Podríamos resumir este comportamiento con tres niveles de consistencia:

  • Bajo: Con este modo, se corre el riesgo de que el primer nodo disponible devuelva un dato antiguo pero garantiza la respuesta más rápida.
  • Medio: Este modo reduciría la probabilidad de devolver un dato antiguo, forzando a Cassandra a llegar a un consenso entre nodos.
  • Alto: De esta forma, Cassandra espera a que todos los nodos con el dato respondan, lo que sacrifica la velocidad de la respuesta pero garantiza el dato más actualizado.

El teorema CAP afirma que los sistemas de base de datos distribuidos solo pueden garantizar hasta dos de estas tres características: Consistencia, Disponibilidad y Tolerancia a Particiones. En la práctica, cualquier base de datos debe garantizar tolerancia a particiones, para que el sistema siga funcionando cuando existan problemas de comunicación entre servidores. Por lo tanto, deberán garantizar consistencia (CP) o disponibilidad (AP).

Cassandra se considera en general un sistema AP, por lo que tiende a garantizar la disponibilidad frente a la consistencia de los datos. Aún así, se puede configurar para ser un sistema CP asegurando altos niveles de consistencia como hemos visto.

Casos de uso de Apache Cassandra y Consideraciones

Entre las limitaciones de Apache Cassandra se encuentra el hecho de que no contiene funcionalidad para realizar agregaciones, por lo que si se necesitan consultas de datos agregados, se deben precomputar, lo que consume tiempo.

La ventaja principal de la base de datos es su velocidad de escritura y la forma de distribuir los datos, que permite una alta escalabilidad. Para sistemas en los que la velocidad de lectura sea crítica, no resulta una solución óptima.

Entre los usos más comunes de Apache Cassandra se encuentran los siguientes:

  • Aplicaciones IoT: En estos sistemas, es frecuente que se tengan miles de sensores enviando información variable. En ocasiones, estos eventos deben ser sincronizados y correlacionados en tiempo real.
  • Monitorización de aplicaciones web: Existen muchos ejemplos relacionados con almacenar la actividad de los usuarios en sitios web.

Cómo instalar Apache Cassandra en Linux

Instalación de Java: Cassandra requiere Java para funcionar. Puedes instalar OpenJDK, que es una implementación open source de Java. En general, el paquete en linux tendrá el nombre default-jdk: sudo apt install default-jdk

Descarga Apache Cassandra desde el sitio web con la última versión estable.

Una vez descargado, extrae el contenido del archivo tar.gz en el directorio que desees: tar -xzf apache-cassandra-x.xx.xx-bin.tar.gz

Cambia al directorio recién creado y ajusta la configuración si es necesario. Puedes encontrar el archivo de configuración principal en conf/cassandra.yaml.

Una vez que hayas configurado Cassandra con el fichero, puedes iniciarlo ejecutando el siguiente comando desde el directorio principal de instalación:./bin/cassandra

También puedes verificar si Cassandra se está ejecutando correctamente utilizando el siguiente comando: nodetool status

Ejemplo de código para Cassandra

A continuación se muestra un ejemplo de código en Python que muestra cómo utilizar Cassandra para conectarse a un cluster y realizar operaciones CRUD (Crear, Leer, Actualizar y Borrar):

# Importa la librería para Cassandra en Python
from cassandra.cluster import Cluster

# Crea una conexión al cluster de Cassandra
cluster = Cluster()
session = cluster.connect()

# Crea un keyspace y una tabla en Cassandra
session.execute("""
    CREATE KEYSPACE IF NOT EXISTS mykeyspace
    WITH REPLICATION = {
        'class': 'SimpleStrategy',
        'replication_factor': 1
    }
""")
session.execute("""
    CREATE TABLE IF NOT EXISTS mykeyspace.users (
        user_id int PRIMARY KEY,
        name text,
        age int
    )
""")

# Inserta un nuevo usuarios en la tabla
session.execute("""
    INSERT INTO mykeyspace.users (user_id, name, age)
    VALUES (1, 'Oscar', 28)
""")

# Consulta los usuarios de la tabla
response = session.execute("""
    SELECT * FROM mykeyspace.users
""")

# Imprime los resultados de la consulta
for user in response:
    print(user.user_id, user.name, user.age)

# Actualiza un usuario en la tabla
session.execute("""
    UPDATE mykeyspace.users SET age = 30
    WHERE user_id = 1
""")

# Elimina un usuario de la tabla
session.execute("""
    DELETE FROM mykeyspace.users
    WHERE user_id = 1
""")

En este ejemplo se importa la biblioteca de Python para Cassandra y se crea una conexión al cluster. Luego se crean un keyspace y una tabla en Cassandra y se inserta un nuevo usuario. Se realiza una consulta para obtener los usuarios, se imprimen los resultados y se realizan actualizaciones y borrados en la tabla.

Continúa Aprendiendo Apache Cassandra

En esta sección, quiero recomendarte tres cursos que te ayudarán a aprender Apache Cassandra desde cero y profundizar en esta tecnología para convertirte en experto:

Curso Cassandra en 2 horas

Apache Cassandra en 2 horas

Este curso te permitirá aprender los conceptos básicos de Apache Cassandra en 2 horas. Desde su arquitectura y gestión hasta las consultas y su integración con Java y Spark.

Curso para principiantes

Aprende Apache Cassandra desde cero

Este es un curso más enfocado al desarrollo web y la integración de Cassandra con NodeJS. Aprenderás todos los conceptos que necesitarás para desenvolverte en este entorno.

Curso Aprende Apache Cassandra desde cero

Cassandra para principiantes

Curso muy completo para aprender Cassandra desde cero. Contiene más de 8 horas de vídeo con todos los conceptos teóricos y prácticos que necesitarás para trabajar con esta tecnología.

Además, por aquí te dejo mis recomendaciones de libros:

Preguntas Frecuentes – FAQ

¿Cómo funciona Apache Cassandra?

Cassandra es una base de datos distribuida que usa un protocolo P2P para comunicar la información de los nodos que componen el sistema. Cada nodo puede realizar operaciones de lectura o de escritura.

¿En qué situación usar Apache Cassandra?

Su alta escalabilidad y la velocidad de escritura de datos la convierten en una solución óptima en aplicaciones IoT y en sistemas de monitorización con multitud de escrituras rápidas.

¿Es Apache Cassandra una base de datos SQL?

Cassandra usa como lenguaje de consulta CQL (Cassandra Query Language). Este dialecto aún no soporta todas las operaciones de SQL, ni tiene las propiedades ACID propias de bases de datos relacionales. Por lo tanto Cassandra no se puede considerar una base de datos relacional SQL sino NoSQL.


A continuación el vídeo-resumen. ¡No te lo pierdas!


Deja una respuesta