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.

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:
- uppsättning
- Lista
- 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.
Här är ögonblicksbilden där data infogas i samlingen.
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".
ALTER TABLE University.Teacher ADD coursenames list<text>;
Här är ögonblicksbilden där data infogas i kolumnen "kursnamn".
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.
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.
CREATE TABLE University.Course ( id int, prereq map<text, text>, PRIMARY KEY (id) );
Här är ögonblicksbilden där data infogas i kartsamlingstyp.
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.






