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.

  • 📦 Tre typer: Sæt indeholder unikke, uordnede værdier, liste bevarer indsættelsesrækkefølgen, og kort gemmer nøgle- og værdipar.
  • 🔤 Indstil adfærd: Elementer gemmes sorteret, og dubletter kasseres automatisk.
  • 🔢 Listeadvarsel: Rækkefølgen bevares, men foranstillede og indekserede operationer kræver læsning før skrivning.
  • 🗺️ Kortbrug: Et kort passer til attributter, hvis nøgler ikke er kendte, når skemaet designes.
  • 📏 Størrelsesgrænse: Hold samlingerne små; hele samlingen læses, selv når ét element er nødvendigt.
  • 🧊 Frossen mulighed: En frossen samling gemmes som én værdi og skal erstattes fuldstændigt.

Cassandra Samlinger sætlistekort

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:

  1. sæt
  2. Liste
  3. 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.

Eksempel Cassandra Sæt samling

Her er det øjebliksbillede, hvor data indsættes i samlingen.

Eksempel Cassandra Sæt samling

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".

Eksempel Cassandra Liste samling

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

Her er et øjebliksbillede, hvor data indsættes i kolonnen "kursusnavne".

Eksempel Cassandra Liste samling

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.

Cassandra Eksempel på listesamling

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.

Eksempel Cassandra Kortsamling

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

Her er det øjebliksbillede, hvor data indsættes i kortindsamlingstype.

Eksempel Cassandra Kortsamling

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.

Ofte Stillede Spørgsmål

Ja, når et indeks findes. Brug CONTAINS for sæt- og listeværdier og CONTAINS KEY for kortnøgler, efter at du har oprettet det matchende VÆRDIER, NØGLER eller ENTRIES-indeks.

Kun hvis den indre samling er frosset, for eksempel en tekstoversigt til en frossen tekstliste. En ikke-frossen samling kan ikke indeholde en anden samling.

Tildeling af en ny samling sletter først alle eksisterende elementer, og der skrives en tombstone for interval. Tilføjelse og fjernelse af individuelle elementer undgår dette og er det foretrukne mønster.

Givet det forventede elementantal og opdateringsmønster anvender AI reglen godt: afgrænset og lille favoriserer en samling, ubegrænset eller hyppigt forespørgte favoriserer en klyngekolonne.

For det meste, selvom den ofte forveksler sæt parenteser med listeparenteser og udelader frosne parenteser, hvor en primærnøgle kræver det. Kør først genererede sætninger mod et testnøgleområde.

Opsummer dette indlæg med: