Cassandra Colecciones: establecer, enumerar y asignar en CQL con ejemplo

⚡ Resumen inteligente

Cassandra Las colecciones almacenan varios valores en una sola columna utilizando los tipos de conjunto, lista y mapa. Esta página explica cada tipo, la sintaxis CQL para crearlos y rellenarlos, cómo actualizar elementos y los límites de tamaño que determinan cuándo una colección no es la opción adecuada.

  • 📦 Tres tipos: Un conjunto almacena valores únicos no ordenados, una lista conserva el orden de inserción y un mapa almacena pares clave-valor.
  • 🔤 Establecer comportamiento: Los elementos se almacenan ordenados y los duplicados se descartan automáticamente.
  • 🔢 Advertencia sobre la lista: El orden se conserva, pero las operaciones de anteposición e indexación requieren una lectura antes de la escritura.
  • 🗺️ Uso del mapa: Un mapa es adecuado para atributos cuyas claves se desconocen al diseñar el esquema.
  • 📏 Límite de tamaño: Mantén las colecciones pequeñas; se lee la colección completa incluso cuando solo se necesita un elemento.
  • 🧊 Opción congelada: Una colección congelada se almacena como un único valor y debe reemplazarse por completo.

Cassandra Mapa de la lista de conjuntos de colecciones

¿Qué son Cassandra Colecciones?

Cassandra Las colecciones son una buena forma de manejar tareas. Se pueden almacenar varios elementos en colecciones. Hay limitaciones en Cassandra .

  • Una columna de colección no puede almacenar más de 64 KB de datos en un solo valor.
  • Mantén la colección pequeña para evitar la sobrecarga que supone consultarla, ya que se lee toda la colección incluso cuando solo se necesita un elemento.
  • Almacenar más de 64 KB implica que solo se pueden consultar los primeros 64 KB, lo que conlleva una pérdida de datos.
  • Una colección no congelada está limitada a aproximadamente 65,535 elementos, y cada elemento se lee conjuntamente como una sola unidad.

Estos límites apuntan a una regla: las colecciones son adecuadas para un número reducido de atributos asociados a una fila, no para una lista abierta que crece con el uso. Todo aquello que crece continuamente debe agruparse en columnas de su propia tabla.

Tipos de Cassandra Colecciones

Existen principalmente tres tipos de colecciones que Cassandra apoya:

  1. Establecer
  2. Lista
  3. Mapear

Cassandra Colección Set

Un conjunto almacena un grupo de elementos que devuelve elementos ordenados al realizar una consulta.

Sintaxis

Aquí está la sintaxis de la colección Set que almacena múltiples direcciones de correo electrónico para el profesor.

CREATE TABLE University.Teacher (
    id int,
    Name text,
    Email set<text>,
    PRIMARY KEY (id)
);

Ejemplo

Aquí está la instantánea donde se crea la tabla “Profesor” con la columna “Correo electrónico” como colección.

Ejemplo de Cassandra Colección Set

Aquí está la instantánea donde se insertan los datos en la colección.

Ejemplo de Cassandra Colección Set

INSERT INTO University.Teacher (id, Name, Email)
VALUES (1, 'Guru99', {'abc@gmail.com', 'xyz@hotmail.com'});

Se pueden agregar o eliminar elementos individuales sin reescribir todo el conjunto, lo cual es la principal ventaja de dejar una colección sin congelar.

UPDATE University.Teacher SET Email = Email + {'new@guru99.com'} WHERE id = 1;
UPDATE University.Teacher SET Email = Email - {'xyz@hotmail.com'} WHERE id = 1;

Cassandra Colección de listas

Cuando el orden de los elementos importa, se utiliza la lista.

Ejemplo

Aquí se muestra la captura de pantalla donde se agrega la columna "cursos de tipo lista" en la tabla "Profesor".

Ejemplo de Cassandra Colección de listas

ALTER TABLE University.Teacher ADD coursenames list<text>;

Aquí está la instantánea donde se insertan los datos en la columna "nombres de cursos".

Ejemplo de Cassandra Colección de listas

INSERT INTO University.Teacher (id, Name, Email, coursenames)
VALUES (2, 'Hamilton', {'hamilton@hotmail.com'}, ['Data Science']);

Aquí está la instantánea que muestra el estado actual de la base de datos después de la inserción.

Cassandra Ejemplo de recopilación de listas

Los elementos se pueden agregar al principio o al final, aunque agregar al principio y actualizar por índice requieren Cassandra leer primero la lista, lo que las hace más lentas que agregarlas.

UPDATE University.Teacher SET coursenames = coursenames + ['Machine Learning'] WHERE id = 2;
UPDATE University.Teacher SET coursenames = ['Statistics'] + coursenames WHERE id = 2;

Cassandra Colección de mapas

El mapa es un tipo de colección que se utiliza para almacenar pares clave-valor. Como su nombre lo indica, asigna una cosa a otra.

Por ejemplo, si desea guardar el nombre del curso con el nombre del curso de requisito previo, puede utilizar la colección de mapas.

Ejemplo

Aquí está la instantánea donde se crea el tipo de mapa para el nombre del curso y el nombre del curso de requisito previo.

Ejemplo de Cassandra Colección de mapas

CREATE TABLE University.Course (
    id int,
    prereq map<text, text>,
    PRIMARY KEY (id)
);

Aquí está la instantánea donde se insertan los datos en el tipo de colección de mapas.

Ejemplo de Cassandra Colección de mapas

INSERT INTO University.Course (id, prereq)
VALUES (1, {'DataScience': 'Database', 'Neural Network': 'Artificial Intelligence'});

Se puede añadir o eliminar una sola entrada sin modificar el resto del mapa.

UPDATE University.Course SET prereq['Robotics'] = 'Linear Algebra' WHERE id = 1;
DELETE prereq['DataScience'] FROM University.Course WHERE id = 1;

Conjunto vs Lista vs Mapa: Elegir una colección

Los tres tipos parecen intercambiables, pero difieren en las garantías de pedido y el coste de actualización.

Aspecto Establecer Lista Mapear
Órdenes Ordenado por valor Se conservó el orden de inserción. Ordenado por clave
Duplicados No se permiten Permitido Llaves únicas
Costo de actualización Barato, no requiere lectura. Agregar barato; anteponer y actualizar el índice requieren una lectura Barato por llave
Mejores para Etiquetas, direcciones de correo electrónico, etiquetas únicas Pasos ordenados donde los duplicados son significativos Atributos con nombre y claves impredecibles

Prefiera un conjunto a una lista a menos que el orden realmente importe, porque las operaciones de índice de lista crean marcadores de eliminación y pueden producir resultados sorprendentes bajo escrituras concurrentes. Agregar frozen En cualquiera de los tres almacenes, se guarda como un valor inmutable, lo que permite que la colección aparezca en una clave primaria, pero elimina las actualizaciones a nivel de elemento.

CREATE TABLE University.Enrolment (
    id int,
    tags frozen<set<text>>,
    PRIMARY KEY (id, tags)
);

Cuando una colección exceda unas pocas docenas de elementos, modele como una tabla separada con el elemento como una columna de agrupación en su lugar, siguiendo el enfoque en el Cassandra reglas del modelo de datosEl filtrado por contenido de colección requiere un índice, cubierto en el crear y eliminar índice tutorial.

Preguntas Frecuentes

Sí, una vez que exista un índice. Utilice CONTAINS para los valores de conjuntos y listas, y CONTAINS KEY para las claves de mapas, después de crear el índice VALUES, KEYS o ENTRIES correspondiente.

Solo si la colección interna está congelada, por ejemplo, un mapa de texto a una lista de texto congelada. Una colección no congelada no puede contener otra colección.

Al asignar una nueva colección, primero se eliminan todos los elementos existentes, lo que genera un marcador de eliminación de rango. Agregar y eliminar elementos individuales evita esto y es el método preferido.

Dado el número de elementos esperado y el patrón de actualización, la IA aplica bien la regla: si es pequeño y limitado, favorece una colección; si no es limitado o se consulta con frecuencia, favorece una columna de agrupación.

En general, aunque con frecuencia confunde las llaves de conjunto con los corchetes de lista y omite la palabra clave congelada donde una clave primaria la requiere. Ejecute primero las sentencias generadas en un espacio de claves de prueba.

Resumir este post con: