Cassandra - Modelo de datos

El modelo de datos de Cassandra es significativamente diferente de lo que normalmente vemos en un RDBMS. Este capítulo proporciona una descripción general de cómo Cassandra almacena sus datos.

Racimo

La base de datos de Cassandra se distribuye en varias máquinas que operan juntas. El contenedor más externo se conoce como Cluster. Para el manejo de fallas, cada nodo contiene una réplica y, en caso de falla, la réplica se hace cargo. Cassandra organiza los nodos en un clúster, en un formato de anillo, y les asigna datos.

Espacio de claves

Keyspace es el contenedor más externo de datos en Cassandra. Los atributos básicos de un espacio de claves en Cassandra son:

  • Replication factor - Es la cantidad de máquinas en el clúster que recibirán copias de los mismos datos.

  • Replica placement strategy- No es más que la estrategia de colocar réplicas en el ring. Contamos con estrategias comosimple strategy (estrategia basada en rack), old network topology strategy (estrategia basada en rack), y network topology strategy (estrategia de centro de datos compartido).

  • Column families- Keyspace es un contenedor para una lista de una o más familias de columnas. Una familia de columnas, a su vez, es un contenedor de una colección de filas. Cada fila contiene columnas ordenadas. Las familias de columnas representan la estructura de sus datos. Cada espacio de teclas tiene al menos una y, a menudo, muchas familias de columnas.

La sintaxis para crear un espacio de claves es la siguiente:

CREATE KEYSPACE Keyspace name
WITH replication = {'class': 'SimpleStrategy', 'replication_factor' : 3};

La siguiente ilustración muestra una vista esquemática de un espacio de claves.

Familia de columnas

Una familia de columnas es un contenedor para una colección ordenada de filas. Cada fila, a su vez, es una colección ordenada de columnas. La siguiente tabla enumera los puntos que diferencian una familia de columnas de una tabla de bases de datos relacionales.

Tabla relacional Familia de columnas Cassandra
Un esquema en un modelo relacional es fijo. Una vez que definimos ciertas columnas para una tabla, al insertar datos, en cada fila todas las columnas deben llenarse al menos con un valor nulo. En Cassandra, aunque las familias de columnas están definidas, las columnas no. Puede agregar libremente cualquier columna a cualquier familia de columnas en cualquier momento.
Las tablas relacionales definen solo columnas y el usuario completa la tabla con valores. En Cassandra, una tabla contiene columnas o se puede definir como una superfamilia de columnas.

Una familia de columnas Cassandra tiene los siguientes atributos:

  • keys_cached - Representa la cantidad de ubicaciones para mantener en caché por SSTable.

  • rows_cached - Representa la cantidad de filas cuyo contenido completo se almacenará en la memoria caché.

  • preload_row_cache - Especifica si desea rellenar previamente la caché de filas.

Note − A diferencia de las tablas relacionales donde el esquema de una familia de columnas no es fijo, Cassandra no obliga a las filas individuales a tener todas las columnas.

La siguiente figura muestra un ejemplo de una familia de columnas Cassandra.

Columna

Una columna es la estructura de datos básica de Cassandra con tres valores, a saber, el nombre de la clave o columna, el valor y una marca de tiempo. A continuación se muestra la estructura de una columna.

Supercolumna

Una supercolumna es una columna especial, por lo tanto, también es un par clave-valor. Pero una supercolumna almacena un mapa de subcolumnas.

Generalmente, las familias de columnas se almacenan en el disco en archivos individuales. Por lo tanto, para optimizar el rendimiento, es importante mantener las columnas que probablemente consultará juntas en la misma familia de columnas, y una súper columna puede ser útil aquí. A continuación se muestra la estructura de una súper columna.

Modelos de datos de Cassandra y RDBMS

La siguiente tabla enumera los puntos que diferencian el modelo de datos de Cassandra del de un RDBMS.

RDBMS Casandra
RDBMS se ocupa de datos estructurados. Cassandra se ocupa de datos no estructurados.
Tiene un esquema fijo. Cassandra tiene un esquema flexible.
En RDBMS, una tabla es una matriz de matrices. (FILA x COLUMNA) En Cassandra, una tabla es una lista de "pares clave-valor anidados". (Tecla FILA x COLUMNA x valor COLUMNA)
La base de datos es el contenedor más externo que contiene los datos correspondientes a una aplicación. Keyspace es el contenedor más externo que contiene datos correspondientes a una aplicación.
Las tablas son las entidades de una base de datos. Las tablas o familias de columnas son la entidad de un espacio de claves.
Row es un registro individual en RDBMS. Row es una unidad de replicación en Cassandra.
La columna representa los atributos de una relación. La columna es una unidad de almacenamiento en Cassandra.
RDBMS admite los conceptos de claves foráneas, combinaciones. Las relaciones se representan mediante colecciones.