El problema: el diseño empieza por las consultas
En SQL se diseñan las tablas a partir de las entidades, Users y Posts, y el optimizador resuelve después cualquier consulta, aunque nadie la previera. Cassandra reparte cada tabla entre los nodos del clúster según su clave de partición: el coordinador calcula el token de esa clave y sabe qué nodo guarda la partición. Sólo es eficiente la consulta que conoce la clave. Todas las demás tienen que preguntar a todos los nodos.
Por eso primero se enumeran las consultas de la aplicación y después se elige, para cada una, una clave que le permita leer una partición en un nodo. Dentro de la partición, las columnas de clustering fijan el orden de las filas.
| Consulta | Qué se conoce | Diseño | Ejercicios |
|---|---|---|---|
| Preguntas de un usuario, las más recientes primero | autorid | Partición por autor, clustering por fecha | 1, 2 |
| Portada con las preguntas de un mes | mes | Filtrado, índice secundario u otra tabla | 3, 6 |
| Preguntas de una etiqueta en un mes | etiqueta, mes | Otra tabla con partición compuesta | 4, 5 |
| Abrir una pregunta por su Id | preguntaid | Índice global hecho a mano | 7 |
| Publicar una pregunta | Todo | Escribir en cada tabla | 8 |
Cuatro salidas cuando la clave no sirve para una consulta
Qué simula este laboratorio y qué no
- Un clúster de cuatro nodos con factor de replicación 1: cada partición vive en un único nodo. El anillo de tokens se divide en cuatro rangos iguales.
- El token es un hash didáctico de 32 bits, no el Murmur3 de 64 bits de Cassandra: los nodos concretos no coincidirán con un clúster real, pero sí el principio.
- Las cifras de nodos contactados, particiones y filas examinadas describen el trabajo del simulador, no tiempos medidos. No hay réplicas, consistencia, latencia, SSTables, TTL, contadores ni colecciones.
- CQL disponible:
CREATE TABLE,DROP TABLE,CREATE INDEX … USING 'sai',DROP INDEX,INSERTcon upsert ySELECTcon igualdad, intervalos,LIMITyALLOW FILTERING. Tiposint,bigint,text,booleanytimestamp. Lo que quede fuera se rechaza como «No implementado en este simulador». - Los boletines de las sesiones 5 y 6 usan Cassandra real; este laboratorio sirve para razonar el diseño antes.
Los datos
Muestra mínimaPreguntas de 2016 de la muestra reducida de Stack Overflow en español, Posts-sample y Users-sample de dsevilla/bd2-data, que conserva una pregunta de cada ocho. Mientras se descargan, o si falla la red, se usa una muestra mínima incrustada con las del primer trimestre.
Columnas que el laboratorio sabe rellenar
Al crear una tabla, el laboratorio la puebla en el acto con las preguntas, usando las columnas cuyo nombre y tipo coinciden con esta lista, igual que el cargador de un cuaderno. Si la tabla tiene la columna etiqueta, escribe una fila por cada etiqueta de la pregunta. Una fila con NULL en la clave primaria no se puede escribir y se omite.
Zona de pruebas
Escribe cualquier sentencia del CQL que admite este simulador. Esta zona usa una base propia con preguntas cargadas en preguntas_por_autor; sus cambios persisten al cambiar de ejercicio y se pierden al cambiar la muestra. El resultado y el dibujo del clúster aparecen en los paneles inferiores.
Puedes escribir varias sentencias separadas por ; y comentarios con --.
La necesidad
Qué tienes que hacer
Qué observar
Resultado esperado
Puedes escribir varias sentencias separadas por ; y comentarios con --. Cada ejecución trabaja sobre el estado actual; «Reiniciar» vuelve al estado inicial del ejercicio.
Clúster de cuatro nodos
Cada cuadrado es una fila y cada color, una partición. Las filas de una partición están siempre juntas y en el mismo nodo. Tras un SELECT, se resaltan los nodos contactados y las particiones leídas.
Resultado
Ejecuta una consulta para ver sus filas.
Referencias: modelado de datos en Apache Cassandra, CREATE TABLE, índices SAI y SELECT e INSERT. Datos de Stack Overflow en español con licencia CC BY-SA.