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.

  • ???? Drie typen: Een set bevat unieke, ongeordende waarden, een lijst behoudt de invoegvolgorde en een map slaat sleutel-waardeparen op.
  • 🔤 Instelgedrag: Elementen worden gesorteerd opgeslagen en duplicaten worden automatisch verwijderd.
  • 🔢 Let op: Lijst met waarschuwingen De volgorde blijft behouden, maar voorvoeg- en indexbewerkingen is een leesbewerking vereist vóór een schrijfbewerking.
  • 🗺️ Kaartgebruik: Een kaart is geschikt voor attributen waarvan de sleutels niet bekend zijn wanneer het schema wordt ontworpen.
  • 📏 Groottelimiet: Houd collecties klein; de hele collectie wordt gelezen, zelfs als er maar één element nodig is.
  • 🧊 Diepvriesoptie: Een bevroren verzameling wordt als één waarde opgeslagen en moet volledig worden vervangen.

Cassandra Lijst met verzamelingen en sets

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:

  1. Set
  2. Lijst
  3. 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.

Voorbeeld Cassandra Verzameling instellen

Hier is de momentopname waarin gegevens in de verzameling worden ingevoegd.

Voorbeeld Cassandra Verzameling instellen

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

Voorbeeld Cassandra Lijst collectie

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

Hier is de momentopname waarin gegevens worden ingevoegd in de kolom “cursusnamen”.

Voorbeeld Cassandra Lijst collectie

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.

Cassandra Lijstverzamelingsvoorbeeld

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.

Voorbeeld Cassandra Kaart collectie

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

Hier is de momentopname waarin gegevens worden ingevoegd in het kaartverzamelingstype.

Voorbeeld Cassandra Kaart collectie

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.

Veelgestelde vragen

Ja, zodra er een index bestaat. Gebruik CONTAINS voor set- en lijstwaarden en CONTAINS KEY voor sleutels in een map, nadat u de bijbehorende VALUES-, KEYS- of ENTRIES-index hebt aangemaakt.

Alleen als de interne verzameling bevroren is, bijvoorbeeld een mapping van tekst naar een bevroren lijst met tekst. Een niet-bevroren verzameling kan geen andere verzameling bevatten.

Bij het toewijzen van een nieuwe collectie worden eerst alle bestaande elementen verwijderd, waardoor een zogenaamde 'range tombstone' wordt aangemaakt. Het toevoegen en verwijderen van individuele elementen voorkomt dit en is de voorkeursmethode.

Gezien het verwachte aantal elementen en het updatepatroon past de AI de regel goed toe: bij een beperkt en klein aantal elementen wordt een collectie bevoordeeld, bij een onbeperkt of frequent opgevraagd aantal elementen wordt een clusterkolom bevoordeeld.

Meestal wel, hoewel het vaak set-haakjes verwart met lijsthaakjes en 'frozen' weglaat waar een primaire sleutel dit vereist. Voer de gegenereerde instructies eerst uit op een test-sleutelruimte.

Vat dit bericht samen met: