Cassandra Colecții: Set, List & Map în CQL cu Exemplu

⚡ Rezumat inteligent

Cassandra Colecțiile stochează mai multe valori într-o singură coloană folosind tipurile set, list și map. Această pagină explică fiecare tip, sintaxa CQL pentru crearea și popularea lor, modul de actualizare a elementelor și limitele de dimensiune care decid când o colecție este alegerea greșită.

  • 📦 Trei tipuri: Setul conține valori unice neordonate, lista păstrează ordinea de inserare, iar harta stochează perechile cheie-valoare.
  • 🔤 Comportamentul setat: Elementele sunt stocate sortate, iar duplicatele sunt eliminate automat.
  • 🔢 Avertisment privind lista: Ordinea este păstrată, dar operațiunile de prefixare și indexare necesită o citire înainte de scriere.
  • 🗺️ Utilizarea hărții: O hartă se potrivește atributelor ale căror chei nu sunt cunoscute atunci când este proiectată schema.
  • 📏 Limita de dimensiune: Păstrați colecțiile mici; întreaga colecție este citită chiar și atunci când este necesar un element.
  • 🧊 Opțiune congelată: O colecție înghețată este stocată ca o singură valoare și trebuie înlocuită complet.

Cassandra Harta listei de colecții

Care sunt Cassandra Colecții?

Cassandra colecțiile sunt o modalitate bună de a gestiona sarcini. Mai multe elemente pot fi stocate în colecții. Există limitări în Cassandra colecții.

  • O coloană de colecție nu poate stoca mai mult de 64 KB de date într-o singură valoare.
  • Păstrați o colecție mică pentru a evita supraîncărcarea interogării colecției, deoarece întreaga colecție este citită chiar și atunci când este necesar un singur element.
  • Stocarea a mai mult de 64 KB înseamnă că doar primii 64 KB pot fi interogați, ceea ce duce la pierderea datelor.
  • O colecție neînghețată este limitată la aproximativ 65,535 de elemente, iar fiecare element este citit împreună ca o singură unitate.

Aceste limite indică o regulă: colecțiile se potrivesc unei serii de atribute atașate unui rând, nu unei liste deschise care crește odată cu utilizarea. Orice element care crește în mod constant aparține grupării în coloane ale propriului tabel.

Tipuri de Cassandra Colecţii

Există în principal trei tipuri de colecții care Cassandra suporta:

  1. set
  2. Listă
  3. Hartă

Cassandra Set de colecție

Un set stochează un grup de elemente care returnează elemente sortate la interogare.

Sintaxă

Iată sintaxa colecției Set care stochează mai multe adrese de e-mail pentru profesor.

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

Exemplu

Iată instantaneul în care tabelul „Profesor” este creat cu coloana „E-mail” ca colecție.

Exemplu de Cassandra Set de colecție

Iată instantaneul în care datele sunt inserate în colecție.

Exemplu de Cassandra Set de colecție

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

Elementele individuale sunt adăugate sau eliminate fără a rescrie întreaga mulțime, acesta fiind principalul avantaj al lăsării unei colecții neînghețate.

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 Colecția de liste

Când ordinea elementelor contează, se folosește lista.

Exemplu

Iată captura de ecran în care coloana cursuri de tip listă este adăugată în tabelul „Profesor”.

Exemplu de Cassandra Colecția de liste

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

Iată instantaneul în care datele sunt inserate în coloana „nume curs”.

Exemplu de Cassandra Colecția de liste

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

Iată instantaneul care arată starea curentă a bazei de date după inserare.

Cassandra Exemplu de colecție de liste

Elementele pot fi adăugate sau prefixate, deși prefixarea și actualizarea prin index necesită ambele Cassandra să citească mai întâi lista, ceea ce le face mai lente decât adăugarea.

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

Cassandra Colecția de hărți

Harta este un tip de colecție care este utilizat pentru a stoca perechi valori cheie. După cum sugerează și numele, mapează un lucru cu altul.

De exemplu, dacă doriți să salvați numele cursului cu numele său prealabil al cursului, poate fi utilizată colecția de hărți.

Exemplu

Iată instantaneul în care este creat tipul de hartă pentru numele cursului și numele cursului prealabil.

Exemplu de Cassandra Colecția de hărți

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

Iată instantaneul în care datele sunt inserate în tipul de colecție de hărți.

Exemplu de Cassandra Colecția de hărți

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

O singură intrare este setată sau eliminată fără a atinge restul hărții.

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

Set vs Listă vs Hartă: Alegerea unei Colecții

Cele trei tipuri par interschimbabile, dar diferă în ceea ce privește garanțiile de comandă și costul actualizării.

Aspect set Listă Hartă
ordonare Sortate după valoare Ordinea de inserare a fost păstrată Sortate după cheie
Dubluri Nu sunt permise Permis Chei unice
Costul actualizării Ieftin, nu necesită citire Adăugați la preț redus; adăugarea la loc inițial și actualizarea indexului necesită citire Ieftin per cheie
Cel mai bun pentru Etichete, adrese de e-mail, etichete unice Pași ordonați în care duplicatele sunt semnificative Atribute denumite cu chei imprevizibile

Preferați un set în locul unei liste, cu excepția cazului în care ordinea contează cu adevărat, deoarece operațiunile de indexare a listelor creează elemente de bază și pot produce rezultate surprinzătoare în cazul scrierilor simultane. Adăugarea congelate pentru oricare dintre cele trei o stochează ca o singură valoare imuabilă, ceea ce permite colecției să apară într-o cheie primară, dar elimină actualizările la nivel de element.

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

Când o colecție ar depăși câteva zeci de elemente, modelați-o ca un tabel separat cu elementul ca o coloană de grupare, urmând abordarea din Cassandra regulile modelului de dateFiltrarea după conținutul colecției necesită un index, descris în crearea și eliminarea indexului tutorial.

Întrebări frecvente

Da, odată ce există un index. Folosiți CONTAINS pentru valorile setate și listate și CONTAINS KEY pentru cheile de hartă, după crearea indexului VALUES, KEYS sau ENTRIES corespunzător.

Numai dacă colecția internă este înghețată, de exemplu, o hartă a textului către o listă de text înghețată. O colecție dezghețată nu poate conține o altă colecție.

Atribuirea unei noi colecții șterge mai întâi fiecare element existent, scriind un interval de date cu caractere negative. Adăugarea și eliminarea elementelor individuale evită acest lucru și reprezintă modelul preferat.

Având în vedere numărul de elemente așteptate și modelul de actualizare, inteligența artificială aplică regula bine: valorile delimitate și mici favorizează o colecție, valorile nelimitate sau interogate frecvent favorizează o coloană grupată în cluster.

În mare parte, deși confundă frecvent acoladele setate cu parantezele de listă și omite „frozen” acolo unde o cheie primară o necesită. Executați mai întâi instrucțiunile generate împotriva unui spațiu de chei de test.

Rezumați această postare cu: