Cassandra Raccolte: set, elenco e mappa in CQL con esempio

⚡ Riepilogo intelligente

Cassandra Le collezioni memorizzano più valori all'interno di una singola colonna utilizzando i tipi set, list e map. Questa pagina spiega ciascun tipo, la sintassi CQL per crearli e popolarli, come aggiornare gli elementi e i limiti di dimensione che determinano quando una collezione non è la scelta appropriata.

  • 📦 Tre tipi: Un set contiene valori unici non ordinati, una lista preserva l'ordine di inserimento e una mappa memorizza coppie chiave-valore.
  • 🔤 Imposta il comportamento: Gli elementi vengono memorizzati in ordine ordinato e i duplicati vengono scartati automaticamente.
  • 🔢 Avvertenza sull'elenco: L'ordine viene preservato, ma le operazioni di preposizione e indicizzazione richiedono una lettura prima della scrittura.
  • ️ Utilizzo della mappa: Una mappa è adatta ad attributi le cui chiavi non sono note al momento della progettazione dello schema.
  • 📏 Limite di dimensione: È importante che le collezioni siano di dimensioni contenute; l'intera collezione viene letta anche quando è necessario un solo elemento.
  • 🧊 Opzione congelata: Una collezione congelata viene memorizzata come un unico valore e deve essere ripristinata per intero.

Cassandra Elenco dei set delle collezioni Mappa

Che cosa sono Cassandra Collezioni?

Cassandra le raccolte sono un buon modo per gestire le attività. È possibile archiviare più elementi in raccolte. Ci sono limitazioni in Cassandra collezioni.

  • Una colonna di tipo collezione non può memorizzare più di 64 KB di dati in un singolo valore.
  • È importante mantenere le collezioni di dimensioni ridotte per evitare il sovraccarico derivante dalle query, poiché l'intera collezione viene letta anche quando è necessario un solo elemento.
  • Memorizzare più di 64 KB significa che è possibile interrogare solo i primi 64 KB, con conseguente perdita di dati.
  • Una collezione non congelata è limitata a circa 65,535 elementi, e ogni elemento viene letto insieme come un'unica unità.

Questi limiti indicano una regola: le raccolte sono adatte a pochi attributi associati a una riga, non a un elenco illimitato che cresce con l'utilizzo. Tutto ciò che continua a crescere appartiene alle colonne di clustering di una tabella separata.

Tipi di Cassandra Collezioni

Esistono principalmente tre tipologie di collezioni Cassandra supporta:

  1. Impostato
  2. Lista
  3. Mappa

Cassandra Set collezione

Un Set memorizza un gruppo di elementi che restituisce elementi ordinati durante l'esecuzione di una query.

Sintassi

Ecco la sintassi della raccolta Set che memorizza più indirizzi email dell'insegnante.

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

Esempio

Ecco l'istantanea in cui la tabella "Insegnante" è creata con la colonna "Email" come raccolta.

Esempio di Cassandra Set collezione

Ecco l'istantanea in cui i dati vengono inseriti nella raccolta.

Esempio di Cassandra Set collezione

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

È possibile aggiungere o rimuovere singoli elementi senza riscrivere l'intero set, e questo è il principale vantaggio di non congelare una collezione.

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 Lista raccolta

Quando l'ordine degli elementi è importante, viene utilizzato l'elenco.

Esempio

Ecco un'istantanea in cui la colonna "corsi" di tipo elenco viene aggiunta alla tabella "Insegnante".

Esempio di Cassandra Lista raccolta

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

Ecco l'istantanea in cui i dati vengono inseriti nella colonna "coursenames".

Esempio di Cassandra Lista raccolta

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

Ecco lo snapshot che mostra lo stato corrente del database dopo l'inserimento.

Cassandra Esempio di raccolta di elenchi

Gli elementi possono essere aggiunti o anteposti, sebbene l'aggiunta all'inizio e l'aggiornamento tramite indice richiedano entrambi Cassandra prima leggono l'elenco, il che li rende più lenti rispetto all'aggiunta in coda.

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

Cassandra Raccolta di mappe

La mappa è un tipo di raccolta utilizzato per archiviare coppie chiave-valore. Come suggerisce il nome, associa una cosa all'altra.

Ad esempio, se si desidera salvare il nome del corso con il nome del corso prerequisito, è possibile utilizzare la raccolta di mappe.

Esempio

Ecco l'istantanea in cui viene creato il tipo di mappa per il nome del corso e il nome del corso prerequisito.

Esempio di Cassandra Raccolta di mappe

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

Ecco l'istantanea in cui i dati vengono inseriti nel tipo di raccolta mappe.

Esempio di Cassandra Raccolta di mappe

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

È possibile aggiungere o rimuovere una singola voce senza modificare il resto della mappa.

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

Set vs Elenco vs Mappa: Scegliere una Collezione

Le tre tipologie sembrano intercambiabili, ma differiscono per le garanzie di ordinazione e i costi di aggiornamento.

Aspetto Impostato Lista Mappa
Ordinamento Ordinato per valore Ordine di inserimento mantenuto Ordinato per chiave
duplicati Non è permesso Permesso Chiavi uniche
Costo di aggiornamento Economico, non è richiesta alcuna lettura Aggiungi a basso costo; l'aggiornamento dell'anteposto e dell'indice richiede una lettura Economico per chiave
migliori per Tag, indirizzi email, etichette univoche Passaggi ordinati in cui i duplicati sono significativi Attributi denominati con chiavi imprevedibili

Preferisci un set a una lista a meno che l'ordine non sia davvero importante, perché le operazioni di indice delle liste creano lapidi e possono produrre risultati sorprendenti in caso di scritture concorrenti. congelati in uno qualsiasi dei tre archivia il valore come un unico valore immutabile, il che consente alla collezione di apparire in una chiave primaria ma rimuove gli aggiornamenti a livello di elemento.

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

Quando una collezione supererebbe alcune dozzine di elementi, modellala come una tabella separata con l'elemento come colonna di clustering, seguendo l'approccio in Cassandra regole del modello dati. Il filtraggio sul contenuto della collezione richiede un indice, trattato in crea e elimina indice tutorial.

DOMANDE FREQUENTI

Sì, una volta creato l'indice. Utilizza CONTAINS per i valori di set e di lista e CONTAINS KEY per le chiavi di mappatura, dopo aver creato l'indice VALUES, KEYS o ENTRIES corrispondente.

Solo se la collezione interna è congelata, ad esempio una mappa di testo su una lista di testo congelata. Una collezione non congelata non può contenere un'altra collezione.

L'assegnazione di una nuova collezione elimina prima tutti gli elementi esistenti, creando una sorta di "tombstone" per l'intervallo. L'aggiunta e la rimozione di singoli elementi evita questo problema ed è il metodo preferibile.

Considerato il numero di elementi previsto e il modello di aggiornamento, l'IA applica bene la regola: dimensioni limitate e ridotte favoriscono una collezione, dimensioni illimitate o interrogate frequentemente favoriscono una colonna di clustering.

Nella maggior parte dei casi, tuttavia, confonde spesso le parentesi graffe di tipo set con le parentesi graffe di tipo list e omette `frozen` laddove una chiave primaria lo richieda. Eseguire prima le istruzioni generate su un keyspace di prova.

Riassumi questo post con: