Cassandra Collecties: set, lijst en kaart in CQL met voorbeeld
⚡ Slimme samenvatting
Cassandra Collecties slaan meerdere waarden op in één kolom met behulp van de typen set, lijst en map. Deze pagina legt elk type uit, de CQL-syntaxis voor het maken en vullen ervan, hoe elementen bijgewerkt kunnen worden en de groottelimieten die bepalen wanneer een collectie niet de juiste keuze is.

Wat zijn Cassandra Collecties?
Cassandra verzamelingen zijn een goede manier voor het afhandelen van taken. Er kunnen meerdere elementen in collecties worden opgeslagen. Er zitten beperkingen in Cassandra collecties.
- Een kolom in een verzameling kan niet meer dan 64 KB aan gegevens in één waarde opslaan.
- Houd een collectie klein om de overhead van het opvragen van elementen uit de collectie te beperken, omdat de hele collectie wordt gelezen, zelfs als er maar één element nodig is.
- Als er meer dan 64 KB wordt opgeslagen, kan er slechts over de eerste 64 KB worden geraadpleegd, wat leidt tot gegevensverlies.
- Een niet-bevroren collectie is beperkt tot ongeveer 65,535 elementen, en elk element wordt als één geheel gelezen.
Deze beperkingen wijzen op één regel: collecties zijn geschikt voor een handvol attributen die aan een rij zijn gekoppeld, niet voor een oneindige lijst die met het gebruik meegroeit. Alles wat blijft groeien, hoort thuis in clusterkolommen van een eigen tabel.
Types van Cassandra Collecties
Er zijn hoofdzakelijk drie soorten collecties Cassandra ondersteunt:
- Set
- Lijst
- Wereldmap
Cassandra Verzameling instellen
Een set slaat een groep elementen op die gesorteerde elementen retourneert bij het uitvoeren van query's.
Syntaxis
Hier ziet u de syntaxis van de Set-verzameling waarin meerdere e-mailadressen voor de docent worden opgeslagen.
CREATE TABLE University.Teacher ( id int, Name text, Email set<text>, PRIMARY KEY (id) );
Voorbeeld
Hier ziet u een momentopname waarin de tabel “Docent” is aangemaakt met de kolom “E-mail” als verzameling.
Hier is de momentopname waarin gegevens in de verzameling worden ingevoegd.
INSERT INTO University.Teacher (id, Name, Email) VALUES (1, 'Guru99', {'abc@gmail.com', 'xyz@hotmail.com'});
Individuele elementen kunnen worden toegevoegd of verwijderd zonder de hele set te herschrijven, wat het grootste voordeel is van een niet-bevroren collectie.
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 Lijst collectie
Wanneer de volgorde van de elementen ertoe doet, wordt de lijst gebruikt.
Voorbeeld
Hier ziet u een schermafbeelding waarin de kolom 'cursussen' van het type 'lijst' is toegevoegd aan de tabel 'Docent'.
ALTER TABLE University.Teacher ADD coursenames list<text>;
Hier is de momentopname waarin gegevens worden ingevoegd in de kolom “cursusnamen”.
INSERT INTO University.Teacher (id, Name, Email, coursenames) VALUES (2, 'Hamilton', {'hamilton@hotmail.com'}, ['Data Science']);
Hier is de momentopname die de huidige databasestatus na het invoegen toont.
Elementen kunnen worden toegevoegd of vooraf worden geplaatst, hoewel zowel het vooraf plaatsen als het bijwerken via index een vereiste hebben. Cassandra Om de lijst eerst te lezen, is het proces trager dan het toevoegen van elementen.
UPDATE University.Teacher SET coursenames = coursenames + ['Machine Learning'] WHERE id = 2; UPDATE University.Teacher SET coursenames = ['Statistics'] + coursenames WHERE id = 2;
Cassandra Kaart collectie
De kaart is een verzamelingstype dat wordt gebruikt om sleutelwaardeparen op te slaan. Zoals de naam al aangeeft, brengt het het ene met het andere in verband.
Als u bijvoorbeeld de cursusnaam wilt opslaan met de vereiste cursusnaam, kunt u gebruik maken van de kaartverzameling.
Voorbeeld
Hier is de momentopname waarin het kaarttype wordt gemaakt voor de cursusnaam en de vereiste cursusnaam.
CREATE TABLE University.Course ( id int, prereq map<text, text>, PRIMARY KEY (id) );
Hier is de momentopname waarin gegevens worden ingevoegd in het kaartverzamelingstype.
INSERT INTO University.Course (id, prereq) VALUES (1, {'DataScience': 'Database', 'Neural Network': 'Artificial Intelligence'});
Een enkele invoer wordt ingesteld of verwijderd zonder de rest van de kaart aan te raken.
UPDATE University.Course SET prereq['Robotics'] = 'Linear Algebra' WHERE id = 1; DELETE prereq['DataScience'] FROM University.Course WHERE id = 1;
Set versus lijst versus kaart: een verzameling kiezen
De drie typen lijken uitwisselbaar, maar verschillen in bestelgaranties en updatekosten.
| Aspect | Set | Lijst | Wereldmap |
|---|---|---|---|
| Bestellen | Gesorteerd op waarde | Invoegvolgorde behouden | Gesorteerd op sleutel |
| duplicaten | Niet toegestaan | Toegestaan | Unieke sleutels |
| Updatekosten | Goedkoop, geen leesvaardigheid vereist | Goedkoop toevoegen; vooraan toevoegen en index bijwerken vereisen een leesbewerking. | Goedkoop per sleutel |
| Best voor | Tags, e-mailadressen, unieke labels | Geordende stappen waarbij duplicaten betekenisvol zijn | Benoemde attributen met onvoorspelbare sleutels |
Geef de voorkeur aan een set boven een lijst, tenzij de volgorde echt van belang is, omdat indexbewerkingen op lijsten 'tombstones' creëren en bij gelijktijdige schrijfbewerkingen tot verrassende resultaten kunnen leiden. bevroren Door de gegevens op een van de drie manieren op te slaan, wordt de waarde als één onveranderlijke waarde opgeslagen. Hierdoor kan de verzameling in een primaire sleutel voorkomen, maar worden updates op elementniveau onmogelijk.
CREATE TABLE University.Enrolment ( id int, tags frozen<set<text>>, PRIMARY KEY (id, tags) );
Wanneer een verzameling meer dan een paar dozijn elementen bevat, modelleer deze dan als een aparte tabel met het element als clusterkolom, volgens de aanpak in de Cassandra regels voor het datamodelHet filteren op de inhoud van een collectie vereist een index, zoals beschreven in de index aanmaken en verwijderen tutorial.






