Cassandra Coleções: Definir, listar e mapear em CQL com exemplo

⚡ Resumo Inteligente

Cassandra As coleções armazenam diversos valores em uma única coluna usando os tipos conjunto, lista e mapa. Esta página explica cada tipo, a sintaxe CQL para criá-las e preenchê-las, como atualizar elementos e os limites de tamanho que determinam quando uma coleção é a escolha errada.

  • 📦 Três tipos: Um conjunto (Set) armazena valores únicos e não ordenados, uma lista (List) preserva a ordem de inserção e um mapa (Map) armazena pares de chave e valor.
  • 🔤 Comportamento definido: Os elementos são armazenados ordenados e os duplicados são descartados automaticamente.
  • 🔢 Aviso importante: A ordem é preservada, mas as operações de prefixo e indexação exigem uma leitura antes da escrita.
  • 🗺️ Utilização do mapa: Um mapa é adequado para atributos cujas chaves não são conhecidas quando o esquema é projetado.
  • 📏 Limite de tamanho: Mantenha as coleções pequenas; a coleção inteira é lida mesmo quando apenas um elemento é necessário.
  • 🧊 Opção congelada: Uma coleção congelada é armazenada como um único valor e deve ser substituída integralmente.

Cassandra Mapa da lista de conjuntos de coleções

Quais são Cassandra Coleções?

Cassandra coleções são uma boa maneira de lidar com tarefas. Vários elementos podem ser armazenados em coleções. Existem limitações em Cassandra coleções.

  • Uma coluna de coleção não pode armazenar mais de 64 KB de dados em um único valor.
  • Mantenha a coleção pequena para evitar a sobrecarga de consultas, pois a coleção inteira é lida mesmo quando apenas um elemento é necessário.
  • Armazenar mais de 64 KB significa que apenas os primeiros 64 KB podem ser consultados, o que resulta em perda de dados.
  • Uma coleção descongelada é limitada a aproximadamente 65,535 elementos, e cada elemento é lido em conjunto como uma unidade.

Esses limites apontam para uma regra: coleções são adequadas para um pequeno número de atributos associados a uma linha, e não para uma lista infinita que cresce com o uso. Qualquer coisa que continue crescendo deve ser agrupada em colunas de sua própria tabela.

Tipos de Cassandra Coleções

Existem basicamente três tipos de coleções que Cassandra apoia:

  1. Conjunto
  2. Lista
  3. Mapa

Cassandra Conjunto de coleção

Um conjunto armazena um grupo de elementos que retorna elementos classificados durante a consulta.

Sintaxe

Aqui está a sintaxe da coleção Set que armazena vários endereços de e-mail do professor.

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

Exemplo

Aqui está o instantâneo onde a tabela “Professor” é criada com a coluna “E-mail” como uma coleção.

Exemplo de Cassandra Conjunto de coleção

Aqui está o instantâneo onde os dados estão sendo inseridos na coleção.

Exemplo de Cassandra Conjunto de coleção

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

Elementos individuais são adicionados ou removidos sem a necessidade de reescrever todo o conjunto, o que é a principal vantagem de deixar uma coleção não congelada.

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 Coleção List

Quando a ordem dos elementos é importante, a lista é usada.

Exemplo

Aqui está um instantâneo onde a coluna "cursos" do tipo lista foi adicionada à tabela "Professor".

Exemplo de Cassandra Coleção List

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

Aqui está o instantâneo onde os dados estão sendo inseridos na coluna “nomes dos cursos”.

Exemplo de Cassandra Coleção List

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

Aqui está o instantâneo que mostra o estado atual do banco de dados após a inserção.

Cassandra Exemplo de coleção de lista

Os elementos podem ser adicionados ao início ou ao fim, embora a adição ao início e a atualização por índice exijam Cassandra primeiro é preciso ler a lista, o que torna o processo mais lento do que adicionar elementos.

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

Cassandra Coleção de mapas

O mapa é um tipo de coleção usado para armazenar pares de valores-chave. Como o próprio nome indica, ele mapeia uma coisa para outra.

Por exemplo, se você quiser salvar o nome do curso com o nome do curso pré-requisito, a coleção de mapas poderá ser usada.

Exemplo

Aqui está o instantâneo onde o tipo de mapa é criado para o nome do curso e seu nome de curso pré-requisito.

Exemplo de Cassandra Coleção de mapas

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

Aqui está o instantâneo onde os dados estão sendo inseridos no tipo de coleção de mapas.

Exemplo de Cassandra Coleção de mapas

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

Uma única entrada é adicionada ou removida sem afetar o restante do 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: Como Escolher uma Coleção

Os três tipos parecem intercambiáveis, mas diferem nas garantias de encomenda e no custo de atualização.

Aspecto Conjunto Lista Mapa
Encomendar Ordenado por valor Ordem de inserção preservada Ordenado por chave
Duplicatas Não permitido Permitido Chaves únicas
Custo da atualização Barato, sem necessidade de leitura Acrescentar é barato; adicionar no início e atualizar o índice exigem leitura. Barato por chave
Melhor para Etiquetas, endereços de e-mail, rótulos exclusivos Etapas ordenadas onde as duplicatas são significativas Atributos nomeados com chaves imprevisíveis

Prefira um conjunto a uma lista, a menos que a ordem seja realmente importante, pois as operações de índice em listas criam marcadores de exclusão (tombstones) e podem produzir resultados inesperados em gravações simultâneas. congelado Em qualquer uma das três opções, o valor é armazenado como um valor imutável, o que permite que a coleção apareça em uma chave primária, mas elimina as atualizações em nível de elemento.

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

Quando uma coleção ultrapassar algumas dezenas de elementos, modele-a como uma tabela separada com o elemento como uma coluna de agrupamento, seguindo a abordagem descrita em Cassandra regras do modelo de dadosA filtragem com base no conteúdo da coleção requer um índice, abordado em [link para o documento/artigo]. criar e excluir índice tutorial.

Perguntas Frequentes

Sim, uma vez que o índice exista. Use CONTAINS para valores de conjuntos e listas, e CONTAINS KEY para chaves de mapas, após criar o índice VALUES, KEYS ou ENTRIES correspondente.

Somente se a coleção interna estiver congelada, por exemplo, um mapa de texto para uma lista de texto congelada. Uma coleção descongelada não pode conter outra coleção.

Atribuir uma nova coleção exclui primeiro todos os elementos existentes, criando um marcador de exclusão (tombstone) para o intervalo. Adicionar e remover elementos individualmente evita esse problema e é o padrão preferido.

Considerando a quantidade esperada de elementos e o padrão de atualização, a IA aplica bem a regra: conjuntos limitados e pequenos favorecem uma coleção, enquanto conjuntos ilimitados ou consultados com frequência favorecem uma coluna de agrupamento.

Na maioria das vezes, porém, confunde chaves de conjunto com chaves de lista e omite o uso de chaves congeladas onde uma chave primária exige. Execute as instruções geradas primeiro em um espaço de chaves de teste.

Resuma esta postagem com: