Cassandra Samlinger: Sæt, liste og kort i CQL med eksempel
⚡ Smart opsummering
Cassandra Samlinger gemmer flere værdier i en enkelt kolonne ved hjælp af typerne sæt, liste og kort. Denne side forklarer hver type, CQL-syntaksen til oprettelse og udfyldning af dem, hvordan man opdaterer elementer, og størrelsesgrænserne, der afgør, hvornår en samling er det forkerte valg.

Hvad er Cassandra Samlinger?
Cassandra samlinger er en god måde at håndtere opgaver på. Flere elementer kan gemmes i samlinger. Der er begrænsninger i Cassandra samlinger.
- En samlingskolonne kan ikke lagre mere end 64 KB data i en enkelt værdi.
- Hold en samling lille for at undgå overhead ved forespørgsler på samlingen, da hele samlingen læses, selv når kun ét element er nødvendigt.
- Lagring af mere end 64 KB betyder, at kun de første 64 KB kan forespørges, hvilket resulterer i tab af data.
- En ikke-frossen samling er begrænset til cirka 65,535 elementer, og hvert element læses samlet som én enhed.
Disse begrænsninger peger på én regel: samlinger passer til en håndfuld attributter, der er knyttet til en række, ikke en åben liste, der vokser med brugen. Alt, der bliver ved med at vokse, hører hjemme i klyngekolonner i sin egen tabel.
Typer af Cassandra Kollektioner
Der er hovedsageligt tre typer af samlinger, der Cassandra bakker op:
- sæt
- Liste
- Kort
Cassandra Sæt samling
Et sæt gemmer en gruppe af elementer, der returnerer sorterede elementer ved forespørgsel.
Syntaks
Her er syntaksen for sætsamlingen, der gemmer flere e-mailadresser til læreren.
CREATE TABLE University.Teacher ( id int, Name text, Email set<text>, PRIMARY KEY (id) );
Eksempel
Her er et øjebliksbillede, hvor tabellen "Lærer" oprettes med kolonnen "E-mail" som en samling.
Her er det øjebliksbillede, hvor data indsættes i samlingen.
INSERT INTO University.Teacher (id, Name, Email) VALUES (1, 'Guru99', {'abc@gmail.com', 'xyz@hotmail.com'});
Individuelle elementer tilføjes eller fjernes uden at hele sættet skal omskrives, hvilket er den største fordel ved at lade en samling være ufrossen.
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 Liste samling
Når rækkefølgen af elementer har betydning, bruges listen.
Eksempel
Her er et øjebliksbillede, hvor kolonnen "Kurser af listetypen" er tilføjet i tabellen "Lærer".
ALTER TABLE University.Teacher ADD coursenames list<text>;
Her er et øjebliksbillede, hvor data indsættes i kolonnen "kursusnavne".
INSERT INTO University.Teacher (id, Name, Email, coursenames) VALUES (2, 'Hamilton', {'hamilton@hotmail.com'}, ['Data Science']);
Her er det øjebliksbillede, der viser den aktuelle databasetilstand efter indsættelse.
Elementer kan tilføjes eller foranstilles, selvom både foranstilling og opdatering via indeks kræver Cassandra at læse listen først, hvilket gør dem langsommere end at tilføje.
UPDATE University.Teacher SET coursenames = coursenames + ['Machine Learning'] WHERE id = 2; UPDATE University.Teacher SET coursenames = ['Statistics'] + coursenames WHERE id = 2;
Cassandra Kortsamling
Kortet er en samlingstype, der bruges til at gemme nøgleværdipar. Som navnet antyder, at det kortlægger en ting til en anden.
Hvis du f.eks. ønsker at gemme banenavnet med dets forudgående banenavn, kan kortsamling bruges.
Eksempel
Her er det øjebliksbillede, hvor korttype oprettes for kursusnavn og dets forudsætning for kursusnavn.
CREATE TABLE University.Course ( id int, prereq map<text, text>, PRIMARY KEY (id) );
Her er det øjebliksbillede, hvor data indsættes i kortindsamlingstype.
INSERT INTO University.Course (id, prereq) VALUES (1, {'DataScience': 'Database', 'Neural Network': 'Artificial Intelligence'});
En enkelt post angives eller fjernes uden at berøre resten af kortet.
UPDATE University.Course SET prereq['Robotics'] = 'Linear Algebra' WHERE id = 1; DELETE prereq['DataScience'] FROM University.Course WHERE id = 1;
Sæt vs. liste vs. kort: Valg af en samling
De tre typer ser ud til at være udskiftelige, men adskiller sig i bestillingsgarantier og opdateringsomkostninger.
| Aspect | sæt | Liste | Kort |
|---|---|---|---|
| Bestilling | Sorteret efter værdi | Indrykningsordre bevaret | Sorteret efter nøgle |
| dubletter | Ikke tilladt | Tilladt | Unikke nøgler |
| Opdateringsomkostninger | Billig, ingen læsning nødvendig | Tilføj billigt; læg foran og indeksér opdatering kræver læsning | Billig pr. nøgle |
| Bedste for | Tags, e-mailadresser, unikke etiketter | Ordnede trin, hvor dubletter er meningsfulde | Navngivne attributter med uforudsigelige nøgler |
Foretræk et sæt frem for en liste, medmindre rækkefølgen virkelig betyder noget, fordi listeindeksoperationer opretter tombstones og kan give overraskende resultater under samtidige skrivninger. frosset til en af de tre gemmer den som én uforanderlig værdi, hvilket tillader samlingen at vises i en primærnøgle, men fjerner opdateringer på elementniveau.
CREATE TABLE University.Enrolment ( id int, tags frozen<set<text>>, PRIMARY KEY (id, tags) );
Når en samling overstiger et par dusin elementer, skal den i stedet modelleres som en separat tabel med elementet som en klyngekolonne, idet man følger fremgangsmåden i Cassandra regler for datamodellerFiltrering på samlingsindhold kræver et indeks, der er dækket af opret og fjern indeks tutorial.






