Cassandra Samlingar: Set, List & Map i CQL med exempel

⚡ Smart sammanfattning

Cassandra Samlingar lagrar flera värden i en enda kolumn med hjälp av typerna set, list och map. Den här sidan förklarar varje typ, CQL-syntaxen för att skapa och fylla i dem, hur man uppdaterar element och storleksgränserna som avgör när en samling är fel val.

  • 📦 Tre typer: Set innehåller unika oordnade värden, list bevarar insättningsordningen och map lagrar nyckel- och värdepar.
  • 🔤 Ange beteende: Element lagras sorterade och dubbletter kasseras automatiskt.
  • 🔢 Lista varning: Ordningen bevaras, men operationer som lägger till och indexerar kräver läsning före skrivning.
  • 🗺️ Kartanvändning: En karta passar attribut vars nycklar inte är kända när schemat utformas.
  • 📏 Storleksgräns: Håll samlingarna små; hela samlingen läses även när ett element behövs.
  • 🧊 Fryst alternativ: En fryst samling lagras som ett värde och måste ersättas helt.

Cassandra Samlingar Set List Map

Vad är Cassandra Samlingar?

Cassandra samlingar är ett bra sätt att hantera uppgifter. Flera element kan lagras i samlingar. Det finns begränsningar i Cassandra samlingar.

  • En samlingskolumn kan inte lagra mer än 64 KB data i ett enda värde.
  • Håll en samling liten för att undvika overhead med att fråga samlingen, eftersom hela samlingen läses även när bara ett element behövs.
  • Att lagra mer än 64 KB innebär att endast de första 64 KB kan efterfrågas, vilket resulterar i dataförlust.
  • En ofrysen samling är begränsad till ungefär 65 535 element, och varje element läses tillsammans som en enhet.

Dessa begränsningar pekar på en regel: samlingar passar en handfull attribut kopplade till en rad, inte en öppen lista som växer med användningen. Allt som fortsätter att växa hör hemma i klusterkolumner i sin egen tabell.

Typer av Cassandra Kollektioner

Det finns främst tre typer av samlingar som Cassandra stödjer:

  1. uppsättning
  2. Lista
  3. Karta

Cassandra Ställ in samling

En uppsättning lagrar en grupp av element som returnerar sorterade element när du frågar.

syntax

Här är syntaxen för Set-samlingen som lagrar flera e-postadresser för läraren.

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

Exempelvis

Här är ögonblicksbilden där tabellen "Lärare" skapas med kolumnen "E-post" som en samling.

Exempel på Cassandra Ställ in samling

Här är ögonblicksbilden där data infogas i samlingen.

Exempel på Cassandra Ställ in samling

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

Enskilda element läggs till eller tas bort utan att hela uppsättningen skrivas om, vilket är den största fördelen med att lämna en samling ofryst.

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 Listsamling

När ordningen på element har betydelse används listan.

Exempelvis

Här är en ögonblicksbild där kolumnen "kurser av listtyp" har lagts till i tabellen "Lärare".

Exempel på Cassandra Listsamling

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

Här är ögonblicksbilden där data infogas i kolumnen "kursnamn".

Exempel på Cassandra Listsamling

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

Här är ögonblicksbilden som visar det aktuella databastillståndet efter infogning.

Cassandra Listsamlingsexempel

Element kan läggas till eller läggas till innan, men både lägga till och uppdatera via index kräver Cassandra att läsa listan först, vilket gör dem långsammare än att lägga till.

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

Cassandra Kartsamling

Kartan är en samlingstyp som används för att lagra nyckelvärdespar. Som namnet antyder att det mappar en sak till en annan.

Om du till exempel vill spara bannamnet med dess förutsättning för bannamn, kan kartsamling användas.

Exempelvis

Här är ögonblicksbilden där karttyp skapas för kursnamn och dess förutsättning för kursnamn.

Exempel på Cassandra Kartsamling

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

Här är ögonblicksbilden där data infogas i kartsamlingstyp.

Exempel på Cassandra Kartsamling

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

En enskild post anges eller tas bort utan att resten av kartan påverkas.

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

Set vs List vs Map: Att välja en samling

De tre typerna ser utbytbara ut men skiljer sig åt i beställningsgarantier och uppdateringskostnad.

Aspect uppsättning Lista Karta
Beställning Sorterat efter värde Införingsordern har sparats Sorterat efter nyckel
dubbletter Inte tillåtet Tillåten Unika nycklar
Uppdateringskostnad Billig, ingen läsning krävs Lägg till billigt; lägg till preliminärt och indexera uppdatering kräver läsning Billig per nyckel
Bäst för Taggar, e-postadresser, unika etiketter Ordnade steg där dubbletter är meningsfulla Namngivna attribut med oförutsägbara nycklar

Föredra en uppsättning framför en lista om inte ordningen verkligen spelar roll, eftersom listindexoperationer skapar tombstones och kan ge överraskande resultat vid samtidiga skrivningar. frystes till någon av de tre lagrar det som ett oföränderligt värde, vilket gör att samlingen kan visas i en primärnyckel men tar bort uppdateringar på elementnivå.

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

När en samling skulle överstiga några dussin element, modellera den som en separat tabell med elementet som en klusterkolumn istället, följ metoden i Cassandra datamodellreglerFiltrering på samlingsinnehåll kräver ett index, som beskrivs i skapa och ta bort index handledning.

Vanliga frågor

Ja, när ett index finns. Använd CONTAINS för uppsättnings- och listvärden och CONTAINS KEY för mappnycklar, efter att du har skapat matchande VÄRDEN, NYCKLAR eller ENTRÉER-index.

Endast om den inre samlingen är fryst, till exempel mappning av text till fryst lista med text. En ofrysen samling kan inte innehålla en annan samling.

Att tilldela en ny samling raderar först alla befintliga element och skriver en tombstone för intervallet. Att lägga till och ta bort enskilda element undviker detta och är det föredragna mönstret.

Givet det förväntade elementantalet och uppdateringsmönstret tillämpar AI regeln väl: begränsade och små gynnar en samling, obegränsade eller ofta efterfrågade gynnar en klusterkolumn.

Mestadels förväxlar den dock ofta set-parenteser med list-parenteser och utelämnar frysta inställningar där en primärnyckel kräver det. Kör genererade satser mot ett testnyckelutrymme först.

Sammanfatta detta inlägg med: