Saltar al contenido

Cassandra — escala primero, preguntas después.

Cassandra fue diseñada en Facebook para una sola cosa: nunca caerse, aunque mueras de éxito. No tiene maestro, no tiene punto único de falla, y agregar un nodo es literalmente conectarlo al clúster. A cambio te pide algo: modelar la base según las queries que vas a hacer.

01El anillo — todos los nodos son iguales

En lugar de un servidor maestro, Cassandra coloca los nodos en un anillo. Cada uno es responsable de un rango del espacio de hashes. No hay jerarquía. Si uno se cae, los demás cubren su trabajo. Si agregas uno nuevo, el anillo se reorganiza para que cada nodo cargue una porción igual.

Sin maestro
Cualquier nodo puede recibir tu petición y coordinarla. No hay "el servidor principal" que pueda caerse.
Replicación
Cada fila se guarda en N nodos (típicamente 3). Si dos caen, el tercero sigue respondiendo.
Escala lineal
Doblar el tráfico = doblar los nodos. Sin reescribir queries, sin cuellos de botella.
Trade-off (CAP)
Es AP: prioriza Availability y Partition tolerancesobre consistencia estricta. Lo veremos en "consistency level".

02La clave de todo: la partition key

En Cassandra, la primary key se divide en dos partes: la partition key decide en qué nodo vive la fila; la clustering key decide en qué orden se guardan las filas dentro de la partición.

CREATE TABLE messages (
  chat_id   text,
  ts        timestamp,
  by        text,
  text      text,
  PRIMARY KEY ((chat_id), ts)
);
  • (chat_id) entre paréntesis dobles → partition key. Su hash decide el nodo.
  • ts a continuación → clustering key. Ordena los mensajes dentro del chat.
  • Todos los mensajes del mismo chat viven juntos, ordenados por fecha — leerlos es 1 disco, 1 nodo.
El error #1 al modelar Cassandra

Si pones la PK en algo que cambia (como un user_id que rara vez se consulta solo), las particiones quedan minúsculas y las queries reales tienen que tocar muchos nodos. La regla de oro: diseña la PK alrededor de la query que más vas a ejecutar.

03Caso · Clúster Ver el anillo en vivo

Aquí tienes un clúster de 5 nodos con factor de replicación 3. Selecciona un chat (esa es la partition key), escribe un mensaje y dale a INSERT. Vas a ver la fila volar hacia su nodo dueño y luego replicarse en los dos siguientes del anillo. Hacé clic en cualquier nodo para ver qué guarda dentro.

Clúster Cassandra · 5 nodos · RF 3
hash(partition_key) → owner + 2 réplicas
Insertar mensaje

partition_key = 'general' → el hash decide el nodo. La fila se replica en 3 nodos.

SELECT por partition key
Total en el clúster · 4 fila(s) lógicas

Cada fila se almacena 3 veces (replicación). Los nodos comparten el espacio del anillo y cada partición vive completa en su nodo dueño + sus 2 réplicas siguientes.

clusterRF = 3N14 filasN24 filasN34 filasN40 filasN50 filas
Selecciona un nodo para inspeccionarlo

Tocá un nodo del anillo para ver qué particiones guarda.

CQL log

Esperando comandos…

Lo que estás viendo

Todos los mensajes con chat_id = 'general' caen en el mismo nodo dueño + sus dos réplicas. Mientras esos tres nodos no se caigan a la vez, el chat sigue funcionando perfectamente — y leer todo el historial es una operación local, ultra rápida.

04Reglas de las queries — lo que duele al principio

Por cómo funciona la partición, Cassandra obliga a que tu WHEREincluya la partition key. No puedes hacer "dame todos los mensajes donde el texto contiene X" como en SQL: eso obligaría a escanear todos los nodos.

-- ✓ válido — sabe a qué nodo ir
SELECT * FROM messages WHERE chat_id = 'general';

-- ✓ válido — partition + rango sobre clustering
SELECT * FROM messages
WHERE chat_id = 'general' AND ts > '2026-01-01';

-- ✗ inválido — sin partition key, necesitaría hablar con todos
SELECT * FROM messages WHERE text = 'hola';

Si realmente necesitas otra forma de buscar, creas una segunda tabla con la PK diseñada para esa query. Sí: en Cassandra se duplica el dato a propósito. Es barato (disco) y vuelve cada query super rápida.

05Consistency level — eligiendo en cada query

Como hay varias réplicas, en cada operación puedes elegir cuántas tienen que confirmar:

ONE
ONE
1 réplica confirma. Velocísimo, puede leer datos un poquito viejos.
QUORUM
QUORUM
La mayoría confirma (RF/2 + 1). Balance recomendado para casi todo.
ALL
ALL
Todas las réplicas. Máxima consistencia, pero si una se cae, falla la query.

06Cuándo Cassandra, cuándo NO

Sí, Cassandra
Volúmenes masivos de escritura (logs, IoT, métricas, telemetría). Aplicaciones always-on en varios datacenters. Time-series y feeds donde la query siempre lleva la misma clave. Netflix, Discord, Apple, Instagram la usan así.
No, Cassandra
Si no sabes cómo vas a consultar. Si necesitas JOINs, transacciones, agregaciones complejas. Si tu volumen no justifica un clúster (3 servidores mínimos). En esos casos, Postgres te alcanza y sobra.
La gran moraleja de Cassandra

"Modela según tus queries, no según tus entidades." En SQL diseñas las tablas con la idea de un mundo limpio y normalizado; en Cassandra diseñas con la idea de las preguntas que tu app va a hacer cada segundo. Es una mentalidad distinta — pero a escala planetaria, es la única que sobrevive.