Cassandra Kokoelmat: Aseta, luettelo ja kartoita CQL:ssä esimerkin kanssa

⚡ Älykäs yhteenveto

Cassandra Kokoelmat tallentavat useita arvoja yhteen sarakkeeseen käyttämällä joukko-, lista- ja karttatyyppejä. Tällä sivulla selitetään kukin tyyppi, CQL-syntaksi niiden luomiseksi ja täyttämiseksi, elementtien päivittäminen ja kokorajoitukset, jotka ratkaisevat, milloin kokoelma on väärä valinta.

  • 📦 Kolme tyyppiä: Joukko (Secure) sisältää yksilöllisiä järjestämättömiä arvoja, lista (List) säilyttää lisäysjärjestyksen ja map (Map) tallentaa avain- ja arvoparit.
  • 🔤 Asetuksen toimintatapa: Elementit tallennetaan lajiteltuina ja kaksoiskappaleet poistetaan automaattisesti.
  • 🔢 Listan varoitus: Järjestys säilyy, mutta alku- ja indeksointitoiminnot vaativat lukemisen ennen kirjoittamista.
  • 🗺️ Kartan käyttö: Kartta sopii attribuuteille, joiden avaimia ei tiedetä skeemaa suunniteltaessa.
  • 📏 Kokorajoitus: Pidä kokoelmat pieninä; koko kokoelma luetaan, vaikka yhtä elementtiä tarvittaisiin.
  • 🧊 Pakastettu vaihtoehto: Jäädytetty kokoelma tallennetaan yhtenä arvona ja se on korvattava kokonaisuudessaan.

Cassandra Kokoelmat Settiluettelo Kartta

Mitä ovat Cassandra Kokoelmat?

Cassandra kokoelmat ovat hyvä tapa hoitaa tehtäviä. Kokoelmiin voidaan tallentaa useita elementtejä. Sisällä on rajoituksia Cassandra kokoelmia.

  • Kokoelmasarakkeeseen ei voi tallentaa yli 64 kt tietoa yhteen arvoon.
  • Pidä kokoelma pienenä välttääksesi kokoelman kyselyn aiheuttaman ylimääräisen kuorman, koska koko kokoelma luetaan, vaikka tarvittaisiin vain yksi elementti.
  • Yli 64 kt:n tallentaminen tarkoittaa, että vain ensimmäiset 64 kt voidaan hakea, mikä johtaa tietojen menetykseen.
  • Jäädyttämätön kokoelma on rajoitettu noin 65 535 elementtiin, ja jokainen elementti luetaan yhdessä yhtenä yksikkönä.

Nämä rajoitukset viittaavat yhteen sääntöön: kokoelmat sopivat kouralliseen riviin liitettyjä attribuutteja, eivät avoimeen luetteloon, joka kasvaa käytön myötä. Kaikki, mikä jatkuvasti kasvaa, kuuluu oman taulukon klusteroituihin sarakkeisiin.

Tyyppisiä Cassandra Kaikki tuotteet

Kokoelmia on pääasiassa kolmenlaisia Cassandra tukee:

  1. Asettaa
  2. Lista
  3. kartta

Cassandra Aseta kokoelma

Joukko tallentaa elementtiryhmän, joka palauttaa lajiteltuja elementtejä kyselyn yhteydessä.

Syntaksi

Tässä on Set-kokoelman syntaksi, joka tallentaa useita opettajan sähköpostiosoitteita.

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

esimerkki

Tässä on tilannekuva, jossa taulukko "Opettaja" luodaan ja "Sähköposti"-sarake kokoelmana.

Esimerkki Cassandra Aseta kokoelma

Tässä on tilannekuva, jossa tietoja lisätään kokoelmaan.

Esimerkki Cassandra Aseta kokoelma

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

Yksittäisiä elementtejä lisätään tai poistetaan ilman koko joukon uudelleenkirjoittamista, mikä on kokoelman jäädyttämättömänä jättämisen tärkein etu.

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 Listakokoelma

Kun elementtien järjestyksellä on väliä, käytetään luetteloa.

esimerkki

Tässä on tilannekuva, jossa listatyyppinen sarakekurssit on lisätty ”Opettaja”-taulukkoon.

Esimerkki Cassandra Listakokoelma

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

Tässä on tilannekuva, jossa tietoja lisätään sarakkeeseen "kurssinimet".

Esimerkki Cassandra Listakokoelma

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

Tässä on tilannekuva, joka näyttää nykyisen tietokannan tilan lisäyksen jälkeen.

Cassandra Esimerkki luettelokokoelmasta

Elementteihin voidaan lisätä liitteitä tai etuliitteitä, vaikka sekä etuliite että päivitys indeksin mukaan vaativat Cassandra lukemaan listan ensin, mikä tekee niistä hitaampia kuin lisääminen.

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

Cassandra Karttakokoelma

Kartta on kokoelmatyyppi, jota käytetään avainarvoparien tallentamiseen. Kuten sen nimi viittaa, se kartoittaa yhden asian toiseen.

Jos esimerkiksi haluat tallentaa kurssin nimen ja sen edellytyksenä olevan kurssin nimen, voit käyttää karttakokoelmaa.

esimerkki

Tässä on tilannekuva, jossa kartan tyyppi luodaan kurssin nimelle ja sen edellytyksenä olevalle kurssin nimelle.

Esimerkki Cassandra Karttakokoelma

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

Tässä on tilannekuva, jossa tietoja lisätään karttakokoelmatyyppiin.

Esimerkki Cassandra Karttakokoelma

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

Yksittäinen merkintä asetetaan tai poistetaan koskematta muuhun karttaan.

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

Joukko vs. lista vs. kartta: Kokoelman valitseminen

Nämä kolme tyyppiä näyttävät keskenään vaihdettavilta, mutta eroavat toisistaan ​​tilaustakuiden ja päivityskustannusten suhteen.

Aspect Asettaa Lista kartta
Järjestys Lajiteltu arvon mukaan Lisäysjärjestys säilytetty Lajiteltu avaimen mukaan
Kopiot Ei sallittu Sallittu Avaimet ainutlaatuiset
Päivityskustannukset Halpa, ei vaadi lukemista Lisää halvalla; alkuosa ja indeksin päivitys vaativat lukemisen Halpa avainta kohden
Parasta Tunnisteet, sähköpostiosoitteet, yksilölliset tunnisteet Järjestetyt vaiheet, joissa kaksoiskappaleilla on merkitystä Nimetyt attribuutit, joilla on arvaamattomat avaimet

Suosi joukkoa listan sijaan, ellei järjestyksellä ole oikeasti väliä, koska listaindeksioperaatiot luovat hautakiviä ja voivat tuottaa yllättäviä tuloksia samanaikaisten kirjoitusten aikana. jäädytetty mihin tahansa kolmesta tallentaa sen yhtenä muuttumattomana arvona, mikä sallii kokoelman näkymisen ensisijaisessa avaimessa, mutta poistaa elementtitason päivitykset.

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

Kun kokoelma ylittää muutaman kymmenen elementin määrän, mallinna se erillisenä taulukkona, jossa elementti on klusterointisarakkeena, noudattaen lähestymistapaa, joka on esitetty kohdassa Cassandra datamallin säännötKokoelman sisällön suodattaminen vaatii indeksin, jota käsitellään kohdassa luo ja poista indeksi opetusohjelma.

UKK

Kyllä, kun indeksi on olemassa. Käytä CONTAINS-metodia joukko- ja lista-arvoille ja CONTAINS KEY-metodia kartoitusavaimille sen jälkeen, kun olet luonut vastaavat VALUES-, KEYS- tai ENTRIES-indeksit.

Vain jos sisempi kokoelma on jäädytetty, esimerkiksi tekstin yhdistäminen jäädytettyyn tekstiluetteloon. Jäädyttämätön kokoelma ei voi sisältää toista kokoelmaa.

Uuden kokoelman luominen poistaa ensin kaikki olemassa olevat elementit ja kirjoittaa aluehautakiven. Yksittäisten elementtien lisääminen ja poistaminen välttää tämän ja on suositeltava tapa.

Odotetun elementtimäärän ja päivitysmallin perusteella tekoäly soveltaa sääntöä hyvin: rajattu ja pieni arvo suosii kokoelmaa, rajaton tai usein kyselyillä tehty arvo puolestaan ​​klusteroivaa saraketta.

Useimmiten se kuitenkin sekoittaa joukkosulkeet listasulkeisiin ja jättää pois jäädytetyn, jos ensisijainen avain sitä vaatii. Suorita luodut lauseet ensin testiavainta vasten.

Tiivistä tämä viesti seuraavasti: