Cassandra Kyselykieli (CQL): Lisää, päivitä ja poista

⚡ Älykäs yhteenveto

Cassandra Kyselykieli käsittelee lisäys-, päivitys-, poisto- ja lukuoperaatioita SQL:ää lähellä olevalla syntaksilla, mutta pohjalla olevalla semantiikalla. Tämä sivu käsittelee kutakin lausetta, lisäys- ja päivitysoperaatioiden yhdistävää upsert-toimintaa sekä WHERE-lauseen todellisia rajoituksia.

  • Lisää toiminta: Vain ensisijainen avain on pakollinen, ja pois jätetyt sarakkeet eivät kuluta tallennustilaa.
  • 🔄 Upsert-semantiikka: Lisääminen ja päivittäminen ovat sama operaatio, joten olemassa olevan avaimen kirjoittaminen korvaa sen hiljaisesti.
  • 🗑️ Poista kustannukset: Poistetuista riveistä tulee hautakiviä, jotka katoavat vasta tiivistysajojen jälkeen.
  • 🔍 Missä lauseke rajoittaa: Suodatus toimii ensisijaisissa avainsarakkeissa tai muissa sarakkeissa, kun indeksi on olemassa.
  • 📊 Kokonaistuki: LASKU, MIN, MAX, SUMMA, AVG ja GROUP BY ovat tuettuja, vaikkakin tehokkaasti vain yhden osion sisällä.
  • 🚫 Vieläkään ei tuettu: Liitokset, OR-ehdot ja osioiden välinen analytiikka pysyvät tarkoituksella CQL:n ulkopuolella.

Cassandra CQL Lisää Päivitä Poista

Lisää tiedot

Cassandra insert-lause kirjoittaa tiedot sisään Cassandra sarakkeita rivimuodossa. Cassandra Lisää kysely tallentaa vain ne sarakkeet, jotka käyttäjä on antanut. Sinun on välttämättä määritettävä vain ensisijaisen avaimen sarake.

Se ei vie tilaa antamattomille arvoille. Tuloksia ei palauteta lisäyksen jälkeen.

Syntaksi

INSERT INTO KeyspaceName.TableName (ColumnName1, ColumnName2, ColumnName3)
VALUES (Column1Value, Column2Value, Column3Value);

esimerkki

Tässä tilannekuva teloituksesta Cassandra Lisää taulukkokyselyyn, joka lisää yhden tietueen Cassandra pöytä "Opiskelija".

Lisää tiedot

INSERT INTO University.Student (RollNo, Name, dept, Semester)
VALUES (2, 'Michael', 'CS', 2);

Kun komento Insert into on suoritettu onnistuneesti Cassandra, yksi rivi lisätään kohtaan Cassandra taulukko Opiskelija, jolla on RollNo 2, nimi Michael, osasto CS ja lukukausi 2.

Tässä on tilannekuva tietokannan nykyisestä tilasta.

Lisää tiedot

Upsert Data

Cassandra ärsyttää. Upsert tarkoittaa sitä Cassandra lisää rivin, jos ensisijaista avainta ei ole jo olemassa, muuten jos ensisijainen avain on jo olemassa, se päivittää kyseisen rivin.

Tällä on käytännön seuraus, joka kannattaa mainita selvästi: INSERT-lauseke ei koskaan ilmoita kaksoisavaimen virheestä, joten vahingossa tehty uudelleenlisäys korvaa olemassa olevan rivin ilman varoitusta. Kun tämä on estettävä, lisää IF NOT EXISTS -lausekkeeseen kevyt transaktio.

INSERT INTO University.Student (RollNo, Name)
VALUES (2, 'Michael') IF NOT EXISTS;

Kevyet transaktiot käyttävät konsensuskierrosta replikoiden välillä, joten ne ovat huomattavasti hitaampia kuin normaali kirjoitus ja ne tulisi varata tapauksiin, jotka todella tarvitsevat tarkistusta.

Päivitä tiedot

Cassandra Päivityskyselyä käytetään tietojen päivittämiseen Cassandra taulukko. Jos tuloksia ei palauteta tietojen päivityksen jälkeen, se tarkoittaa, että tiedot on päivitetty onnistuneesti, muuten palautetaan virhe. Sarakearvoja muutetaan "Set"-lauseessa, kun tiedot suodatetaan "Where"-lauseella.

Syntaksi

UPDATE KeyspaceName.TableName
SET ColumnName1 = NewValue1,
    ColumnName2 = NewValue2
WHERE ColumnName = ColumnValue;

esimerkki

Tässä on kuvakaappaus, joka näyttää tietokannan tilan ennen tietojen päivittämistä.

Päivitä tiedot

Tässä tilannekuva teloituksesta Cassandra Päivitä-komento, joka päivittää opiskelijataulukon tietueen.

Päivitä tiedot

UPDATE University.Student
SET name = 'Hayden'
WHERE rollno = 1;

Päivityskyselyn onnistuneen suorittamisen jälkeen sisään Cassandra 'Päivitä opiskelija', opiskelijan nimi muutetaan 'Clark':sta 'Hayden'iksi, jolla on rollno 1.

Tässä on kuvakaappaus, joka näyttää tietokannan tilan tietojen päivityksen jälkeen.

Päivitä tiedot

Upsert-käyttäytymisen vuoksi UPDATE-komento, joka kohdistuu olemattomaan ensisijaiseen avaimeen, luo rivin epäonnistumisen sijaan.

Cassandra Poista tiedot

Komento 'Poista' poistaa koko rivin tai joitakin sarakkeita taulukosta Opiskelija. Kun tiedot poistetaan, niitä ei poisteta taulukosta välittömästi. Sen sijaan poistetut tiedot merkitään hautakivellä ja poistetaan tiivistyksen jälkeen.

Syntaksi

DELETE FROM KeyspaceName.TableName
WHERE ColumnName1 = ColumnValue;

Ylempi Cassandra Poista rivin syntaksi poistaa yhden tai useampia rivejä riippuen datan suodatuksesta where-lauseessa.

DELETE ColumnName1, ColumnName2 FROM KeyspaceName.TableName
WHERE ColumnName1 = ColumnValue;

Yllä oleva syntaksi poistaa joitain sarakkeita taulukosta.

esimerkki

Tässä on tilannekuva, joka näyttää tietokannan nykyisen tilan ennen tietojen poistamista.

Cassandra Poista tiedot

Tässä on tilannekuva komennosta, joka poistaa yhden rivin taulukosta Opiskelija.

Cassandra Poista tiedot

DELETE FROM University.Student WHERE rollno = 1;

CQL Delete -komennon onnistuneen suorittamisen jälkeen Student-taulukosta poistetaan yksi rivi, jossa rollno-arvona on 1.

Tässä on tilannekuva, joka näyttää tietokannan tilan tietojen poistamisen jälkeen.

Cassandra Poista tiedot

Hautakivet säilyvät oletusarvoisesti kymmenen päivää eli gc_grace_seconds, joten poiston aikana offline-tilassa oleva solmu ei voi herättää riviä henkiin palatessaan. Suurten levymäärien poistaminen jättää siis merkkejä, joiden ohi jokaisen seuraavan lukukerran on skannattava.

Mitä Cassandra ei tue

CQL lainaa SQL-syntaksia, mutta ei relaatiolaskennan suoritusmallia, joten useat tutut rakenteet käyttäytyvät eri tavalla tai puuttuvat kokonaan.

  1. CQL ei tue taulukoiden välisiä liitoksia. Liittyvät tiedot on denormalisoitava yhdeksi taulukoksi kirjoitusvaiheessa.
  2. CQL ei tue OR-ehtoja WHERE-lausekkeessa. Käytä IN-lauseketta yhdessä sarakkeessa tai suorita erilliset kyselyt.
  3. CQL ei tue UNION- tai INTERSECT-operaattoreita.
  4. Muita kuin ensisijaisia ​​avaimia ei voida suodattaa, ennen kuin niille on luotu indeksi.
  5. Suurempi kuin- ja pienempi kuin -vertailut koskevat vain klusterointisarakkeita, koska vain ne lajitellaan levyllä.
  6. Kuvioiden yhteensovitus LIKE-funktiolla vaatii SASI-indeksin, eikä sitä voi käyttää tavallisissa sarakkeissa.

Yksi pitkäaikainen väite kaipaa korjausta. Kokonaisfunktioita tuetaan: LASKU, MIN, MAX, SUMMA ja AVG saapui Cassandra 2.2 ja GROUP BY saapui 3.10. Varoitus koskee pikemminkin laajuutta kuin saatavuutta.

SELECT dept, COUNT(*) FROM University.Student
WHERE RollNo = 1 GROUP BY dept;

Yhteen osioon rajoitettuna, kuten yllä, aggregaatti on tehokas. Koko taulukon läpi ajettuna siitä tulee klusterinlaajuinen skannaus, minkä vuoksi Cassandra ei sovellu ad hoc -analytiikkaan ja miksi raskas raportointi yleensä siirretään Spark tai ulkoiseen varastoon.

Cassandra Missä lauseke

In Cassandra, tietojen haku on arkaluonteinen asia. Pylväs suodatetaan sisään Cassandra luomalla indeksin ei-ensisijaisiin avainsarakkeisiin.

Syntaksi

SELECT ColumnNames FROM KeyspaceName.TableName
WHERE ColumnName1 = Column1Value
  AND ColumnName2 = Column2Value;

esimerkki

  • Tässä on tilannekuva, joka näyttää tietojen haun opiskelijataulukosta ilman tietojen suodatusta.

Cassandra Missä lauseke

SELECT * FROM University.Student;

Opiskelijataulukosta haetaan kaksi tietuetta.

  • Tässä on tilannekuva, joka näyttää tietojen haun Studentilta tietojen suodatuksella. Yksi tietue haetaan.

Tiedot suodatetaan nimisarakkeen mukaan. Kaikki tietueet, joiden nimi on yhtä suuri kuin Guru99.

Cassandra Missä lauseke

SELECT * FROM University.Student WHERE name = 'Guru99';

Säännöt, jotka määräävät, mihin sarakkeisiin WHERE-lauseke voi viitata, seuraavat suoraan perusavaimesta.

  • osioavain on annettava kokonaisuudessaan mitä tahansa tehokasta kyselyä varten, koska se tunnistaa dataa sisältävän solmun.
  • Clustersarakkeita voidaan sitten rajoittaa, mutta vain siinä järjestyksessä kuin ne on ilmoitettu. Ohitaping yksi hylätään.
  • Alueiden vertailut ovat sallittuja viimeksi viitatussa klusterointisarakkeessa, eivät aiemmissa.
  • mitään toinen sarake tarvitsee toissijaisen indeksin, jota käsitellään kohdassa luo ja poista indeksi opetusohjelma.

Kun kysely hylätään, Cassandra ehdottaa usein ALLOW FILTERING -komennon lisäämistä. Pidä sitä varoituksena pikemminkin kuin korjauksena: se skannaa jokaisen osion jokaisella solmulla, ja skeeman muutos on lähes aina oikea vastaus.

UKK

Erätiedosto ryhmittelee lausekkeet siten, että ne onnistuvat tai epäonnistuvat yhdessä. Käytä sitä pitääksesi kaksoiskappaleet tahdissa, äläkä joukkolatauksessa, jossa useiden osioiden ylittävä erätiedosto hidastaa koordinaattoria pahasti.

Ajurit sivuttavat automaattisesti käyttämällä sivutustilatunnusta. cqlsh:ssa PAGING asettaa koon. Vältä OFFSET-käskyn emulointia laskurilla, koska Cassandra ei ole tehokasta rivin ohitustaping mekanismi.

Jos replika oli poissa käytöstä yli gc_grace_seconds-ajan ja hautakivi oli jo tiivistetty pois, replika pitää vanhan rivin edelleen paikallaan ja levittää sitä takaisin. Säännöllinen korjaus estää tämän.

Yksinkertaiset yhden taulukon valinnat konvertoivat hyvin. Millään liitoksen, OR:n tai alikyselyn sisältävällä funktiolla ei ole suoraa CQL-vastinetta, ja tekoäly usein peittää aukon ALLOW FILTERING -komennolla, mikä ei ole ratkaisu.

Kyllä. Liimataan TRACING ON -tuloste antaa yleensä selkeän tuloksen hautakiviskannauksista, laajoista osioista tai solmujen välisistä hypyistä. Tarkista ehdotettu kaavamuutos kopiosta ennen sen käyttöönottoa.

Tiivistä tämä viesti seuraavasti: