Cassandra Samlinger: Sett, liste og kart i CQL med eksempel

⚡ Smart oppsummering

Cassandra Samlinger lagrer flere verdier i én kolonne ved hjelp av typene sett, liste og kart. Denne siden forklarer hver type, CQL-syntaksen for å opprette og fylle dem ut, hvordan man oppdaterer elementer og størrelsesgrensene som avgjør når en samling er feil valg.

  • 📦 Tre typer: Settet inneholder unike, uordnede verdier, listen bevarer innsettingsrekkefølgen, og kartet lagrer nøkkel- og verdipar.
  • 🔤 Angi oppførsel: Elementer lagres sortert, og duplikater forkastes automatisk.
  • 🔢 Listeadvarsel: Rekkefølgen bevares, men foranstilte og indekserte operasjoner krever lesing før skriving.
  • 🗺️ Kartbruk: Et kart passer til attributter hvis nøkler ikke er kjent når skjemaet utformes.
  • 📏 Størrelsesgrense: Hold samlingene små; hele samlingen leses selv når ett element er nødvendig.
  • 🧊 Frossen alternativ: En frossen samling lagres som én verdi og må erstattes fullstendig.

Cassandra Samlinger Settliste Kart

Hva er Cassandra Samlinger?

Cassandra samlinger er en god måte å håndtere oppgaver på. Flere elementer kan lagres i samlinger. Det er begrensninger i Cassandra samlinger.

  • En samlingskolonne kan ikke lagre mer enn 64 KB data i én enkelt verdi.
  • Hold en samling liten for å unngå overhead ved å spørre samlingen, fordi hele samlingen leses selv når bare ett element er nødvendig.
  • Lagring av mer enn 64 KB betyr at bare de første 64 KB kan spørres, noe som resulterer i tap av data.
  • En ufryst samling er begrenset til omtrent 65 535 elementer, og hvert element leses sammen som én enhet.

Disse begrensningene peker mot én regel: samlinger passer til en håndfull attributter knyttet til en rad, ikke en åpen liste som vokser med bruk. Alt som fortsetter å vokse hører hjemme i klyngekolonner i sin egen tabell.

Typer av Cassandra Kategorier

Det er hovedsakelig tre typer samlinger som Cassandra støtter:

  1. Sett
  2. Liste
  3. kart

Cassandra Sett samling

Et sett lagrer en gruppe med elementer som returnerer sorterte elementer ved spørring.

syntax

Her er syntaksen til Set-samlingen som lagrer flere e-postadresser for læreren.

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

Eksempel

Her er øyeblikksbildet der tabellen "Lærer" er opprettet med kolonnen "E-post" som en samling.

Eksempel Cassandra Sett samling

Her er øyeblikksbildet der data blir satt inn i samlingen.

Eksempel Cassandra Sett samling

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

Individuelle elementer legges til eller fjernes uten å skrive hele settet om, noe som er hovedfordelen med å la 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 Innsamling

Når rekkefølgen på elementene betyr noe, brukes listen.

Eksempel

Her er et øyeblikksbilde der kolonnen «kurs av listetypen» er lagt til i tabellen «Lærer».

Eksempel Cassandra Liste Innsamling

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

Her er øyeblikksbildet der data settes inn i kolonnen "kursnavn".

Eksempel Cassandra Liste Innsamling

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

Her er øyeblikksbildet som viser gjeldende databasestatus etter innsetting.

Cassandra Eksempel på listesamling

Elementer kan legges til eller legges foran, men både foranstilling og oppdatering via indeks krever Cassandra å lese listen først, noe som gjør dem tregere enn å legge til.

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

Cassandra Kartsamling

Kartet er en samlingstype som brukes til å lagre nøkkelverdipar. Som navnet tilsier at den kartlegger en ting til en annen.

Hvis du for eksempel ønsker å lagre kursnavn med dets forutsetning for kursnavn, kan kartsamling brukes.

Eksempel

Her er øyeblikksbildet der karttype opprettes for kursnavn og dets forutsetning for kursnavn.

Eksempel Cassandra Kartsamling

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

Her er øyeblikksbildet der data settes inn i kartsamlingstypen.

Eksempel Cassandra Kartsamling

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

En enkelt oppføring angis eller fjernes uten å berøre resten av kartet.

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

Sett vs. liste vs. kart: Velge en samling

De tre typene ser ut til å være utskiftbare, men de har forskjellige bestillingsgarantier og oppdateringskostnader.

Aspekt Sett Liste kart
bestilling Sortert etter verdi Innsettingsordre bevart Sortert etter nøkkel
duplikater Ikke tillatt Lov Nøkler unike
Oppdateringskostnad Billig, ingen lesebehov Billig legg til; legg til foran og indekser oppdatering krever lesing Billig per nøkkel
Best for Tagger, e-postadresser, unike etiketter Ordnede trinn der duplikater er meningsfulle Navngitte attributter med uforutsigbare nøkler

Foretrekk et sett fremfor en liste med mindre rekkefølgen virkelig betyr noe, fordi listeindeksoperasjoner oppretter gravsteiner og kan gi overraskende resultater under samtidige skrivinger. frossen til hvilken som helst av de tre lagrer den som én uforanderlig verdi, som lar samlingen vises i en primærnøkkel, men fjerner oppdateringer på elementnivå.

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

Når en samling overstiger noen få dusin elementer, modeller den som en separat tabell med elementet som en klyngekolonne i stedet, følg tilnærmingen i Cassandra datamodellreglerFiltrering på samlingsinnhold krever en indeks, dekket i opprette og slette indeks opplæringen.

Spørsmål og svar

Ja, når en indeks finnes. Bruk CONTAINS for sett- og listeverdier, og CONTAINS KEY for tilordningsnøkler, etter at du har opprettet den samsvarende VERDIER-, NØKLE- eller ENTRIES-indeksen.

Bare hvis den indre samlingen er frosset, for eksempel teksttilordning til frossen tekstliste. En ikke-frossen samling kan ikke inneholde en annen samling.

Når du tilordner en ny samling, slettes først alle eksisterende elementer, og det skrives en gravstein for et område. Å legge til og fjerne individuelle elementer unngår dette og er det foretrukne mønsteret.

Gitt forventet elementantall og oppdateringsmønster, anvender AI regelen godt: begrenset og liten favoriserer en samling, ubegrenset eller ofte spørret favoriserer en klyngekolonne.

For det meste, men den forveksler ofte settparenteser med listeparenteser og utelater frosne klammer der en primærnøkkel krever det. Kjør genererte setninger mot et testnøkkelrom først.

Oppsummer dette innlegget med: