Cassandra Päringukeel (CQL): sisestamine, värskendamine ja kustutamine

⚡ Nutikas kokkuvõte

Cassandra Päringukeel (Queling Language) käsitleb lisamis-, värskendamis-, kustutamis- ja lugemisoperatsioone SQL-ile lähedase süntaksiga, kuid erineva semantikaga. See leht käsitleb iga lauset, lisamis- ja värskendamisoperatsioone ühendavat upsert-käitumist ning WHERE-klausli tegelikke piiranguid.

  • âž• Sisesta käitumine: Kohustuslik on ainult primaarvõti ja väljajäetud veerud ei kasuta salvestusruumi.
  • 🔄 Upserti semantika: Lisamine ja värskendamine on sama toiming, seega olemasoleva võtme kirjutamine kirjutab selle vaikselt ĂĽle.
  • 🗑️ Kustuta maksumus: Eemaldatud ridadest saavad hauakivid ja need kaovad alles pärast tihendamise tsĂĽklite lõppu.
  • 🔍 Kus klausli piirid on: Filtreerimine toimib primaarvõtme veergude või muude veergude puhul, kui indeks on olemas.
  • 📊 Koondtugi: LOEND, MIN, MAX, SUMMA, AVG ja GROUP BY on toetatud, kuigi tõhusalt ainult ĂĽhe partitsiooni piires.
  • đźš« Ikka veel toetamata: Liitmised, VĂ•I tingimused ja partitsioonideĂĽlene analĂĽĂĽs jäävad disaini tõttu CQL-ist välja.

Cassandra CQL Sisesta Värskenda Kustuta

Sisesta andmed

. Cassandra insert lause kirjutab andmed sisse Cassandra veerud rea kujul. Cassandra sisestamise päring salvestab ainult need veerud, mille kasutaja on andnud. Peate tingimata määrama ainult primaarvõtme veeru.

Andmata väärtuste jaoks ei võta see ruumi. Pärast sisestamist tulemusi ei tagastata.

SĂĽntaks

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

Näide

Siin on hetktõmmis hukatust Cassandra Sisestage tabelipäring, mis lisab ühe kirje Cassandra tabel "Õpilane".

Sisesta andmed

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

Pärast käsu Insert into edukat täitmist Cassandra, lisatakse üks rida Cassandra tabel Õpilane rollNo 2, nimi Michael, osakonna CS ja semester 2.

Siin on hetktõmmis praegusest andmebaasi olekust.

Sisesta andmed

Upsert Data

Cassandra ajab närvi. Upsert tähendab seda Cassandra lisab rea, kui primaarvõtit pole juba olemas, vastasel juhul kui primaarvõti on juba olemas, värskendab see seda rida.

Sellel on praktiline tagajärg, mida tasub selgelt välja tuua: INSERT ei anna kunagi teada duplikaatvõtme veast, seega kirjutab juhuslik uuesti sisestamine olemasoleva rea ​​hoiatuseta üle. Kui seda on vaja vältida, lisage IF NOT EXISTS, et muuta lause kergeks tehinguks.

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

Kerged tehingud kasutavad koopiate vahel konsensusvooru, seega on need tavalisest kirjutamisest oluliselt aeglasemad ja neid tuleks kasutada ainult juhtudel, kus kontroll on tõesti vajalik.

Värskenda andmeid

. Cassandra Värskenduspäringut kasutatakse andmete värskendamiseks Cassandra tabel. Kui pärast andmete värskendamist tulemusi ei tagastata, tähendab see, et andmed on edukalt värskendatud, vastasel juhul tagastatakse tõrge. Veergude väärtusi muudetakse klauslis „Määra”, samal ajal kui andmeid filtreeritakse klausli „Kuhu” abil.

SĂĽntaks

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

Näide

Siin on ekraanipilt, mis näitab andmebaasi olekut enne andmete värskendamist.

Värskenda andmeid

Siin on hetktõmmis hukatust Cassandra Värskenduskäsk, mis värskendab õpilase tabelis olevat kirjet.

Värskenda andmeid

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

Pärast värskenduspäringu edukat täitmist Cassandra „Uuenda õpilast”, õpilase nimi muudetakse nimest „Clark” nimeks „Hayden”, millel on rollno 1.

Siin on ekraanipilt, mis näitab andmebaasi olekut pärast andmete värskendamist.

Värskenda andmeid

Upsert-käitumise tõttu loob UPDATE primaarvõtme suhtes, mida pole olemas, rea, mitte ei nurju.

Cassandra Kustuta andmed

Käsk "Kustuta" eemaldab tabelist terve rea või mõned veerud. Andmete kustutamisel ei kustutata neid tabelist kohe. Selle asemel märgitakse kustutatud andmed hauakiviga ja eemaldatakse pärast tihendamist.

SĂĽntaks

DELETE FROM KeyspaceName.TableName
WHERE ColumnName1 = ColumnValue;

Ülaltoodud Cassandra rea kustutamise süntaks kustutab ühe või mitu rida olenevalt andmete filtreerimisest kus-klauslis.

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

Ülaltoodud süntaks kustutab tabelist mõned veerud.

Näide

Siin on hetktõmmis, mis näitab praegust andmebaasi olekut enne andmete kustutamist.

Cassandra Kustuta andmed

Siin on hetktõmmis käsust, mis eemaldab tabelist Õpilane ühe rea.

Cassandra Kustuta andmed

DELETE FROM University.Student WHERE rollno = 1;

Pärast CQL Delete käsu edukat käivitamist kustutatakse tabelist Student üks rida, kus rullnumbri väärtus on 1.

Siin on hetktõmmis, mis näitab andmebaasi olekut pärast andmete kustutamist.

Cassandra Kustuta andmed

Hauakivid jäävad ellu gc_grace_seconds ehk vaikimisi kümme päeva, seega ei saa kustutamise ajal võrguühenduseta sõlm rida naasmisel taastada. Suurte köidete kustutamine jätab seega markerid, millest iga järgnev lugemine peab mööda skannima.

M Cassandra ei toeta

CQL laenab SQL-süntaksit, kuid mitte relatsioonilist teostusmudelit, seega käituvad mitmed tuttavad konstruktsioonid erinevalt või puuduvad.

  1. CQL ei toeta tabelitevahelisi liitmisi. Seotud andmed tuleb kirjutamise ajal denormaliseerida ĂĽheks tabeliks.
  2. CQL ei toeta WHERE-klauslis OR-tingimusi. Kasutage IN-tingimusi ühel veerul või käivitage eraldi päringud.
  3. CQL ei toeta UNIONi ega INTERSECTi.
  4. Mitte-primaarvõtme veerge ei saa filtreerida enne, kui neile on indeks loodud.
  5. Suurem kui ja väiksem kui võrdlused kehtivad ainult klastrite veergude puhul, kuna kettal sorteeritakse ainult neid.
  6. Mustrite sobitamine funktsiooniga LIKE nõuab SASI indeksit ja see pole tavaliste veergude puhul saadaval.

Üks pikaajaline väide vajab parandamist. Toetatud on koondfunktsioonid: LOEND, MIN, MAX, SUM ja AVG saabus Cassandra 2.2 ja GROUP BY saabus 3.10. Hoiatus seisneb pigem ulatuses kui saadavuses.

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

Nagu eespool kirjeldatud, on agregaat efektiivne, kui see on piiratud ühe partitsiooniga. Kui see käivitatakse üle kogu tabeli, saab sellest klastriülene skaneering, mistõttu Cassandra jääb ad hoc analüüsi jaoks sobimatuks ja miks mahukas aruandlus tavaliselt suunatakse Spark või välisest laost.

Cassandra Kui klausel

In Cassandra, on andmete hankimine tundlik teema. Kolonn filtreeritakse sisse Cassandra luues indeksi mittepõhistele võtmete veergudele.

SĂĽntaks

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

Näide

  • Siin on hetktõmmis, mis näitab andmete väljavõtmist õpilase tabelist ilma andmete filtreerimiseta.

Cassandra Kui klausel

SELECT * FROM University.Student;

Õpilase tabelist leitakse kaks kirjet.

  • Siin on hetktõmmis, mis näitab andmete väljavõtmist õpilasest andmete filtreerimisega. Otsitakse ĂĽks kirje.

Andmeid filtreeritakse nimeveeru järgi. Kõik kirjed, mille nimi on võrdne nimega, leitakse. Guru99.

Cassandra Kui klausel

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

Reeglid, mis määravad, millistele veergudele WHERE-klausel viidata võib, tulenevad otse primaarvõtmest.

  • . partitsioonivõti tuleb iga efektiivse päringu jaoks täielikult esitada, kuna see identifitseerib andmeid hoidva sõlme.
  • Clusterveergude võib seejärel piirata, aga ainult selles järjekorras, milles need deklareeriti. Jäta vaheleping ĂĽks lĂĽkatakse tagasi.
  • Vahemiku võrdlused on lubatud viimasel viidatud klastriveerul, mitte varasematel.
  • mistahes teine ​​veerg vajab teisest indeksit, mida käsitletakse jaotises indeksi loomine ja eemaldamine juhendaja.

Kui päring lükatakse tagasi, Cassandra soovitab sageli lisada käsu ALLOW FILTERING. Käsitle seda pigem hoiatusena kui parandusena: see skannib iga partitsiooni igal sõlmel ja skeemi muutmine on peaaegu alati õige vastus.

KKK

Partii (batch) grupeerib lauseid nii, et need õnnestuvad või ebaõnnestuvad koos. Seda kasutatakse dubleeritud tabelite ajakohasena hoidmiseks, mitte hulgilaadimiseks, kus mitme partitsiooni vaheline partii aeglustab koordinaatori tööd märkimisväärselt.

Draiverid lehekülgevad automaatselt, kasutades lehitsemise oleku tunnust. cqlsh-is määrab PAGING suuruse. Väldi OFFSET-i emuleerimist loenduriga, sest Cassandra puudub efektiivne rea vahelejätmineping mehhanism.

Kui koopia oli maas kauem kui gc_grace_seconds ja hauakivi oli juba kokku surutud, hoiab koopia vana rida endiselt alles ja laiendab seda tagasi. Regulaarne parandamine hoiab selle ära.

Lihtsad ühe tabeli valikud konverteerivad hästi. Millelgi, mis sisaldab liitu, OR või alampäringut, puudub otsene CQL-ekvivalent ja tehisintellekt katab lünga sageli funktsiooniga ALLOW FILTERING, mis pole lahendus.

Jah. Kleebitakse TRACING ON väljund annab tavaliselt selge näidu hauakivide skaneeringute, laiade partitsioonide või sõlmedevaheliste hüpete kohta. Enne soovitatud skeemimuudatuse rakendamist kontrollige seda koopia peal.

Võta see postitus kokku järgmiselt: