Looge ja sisestage INDEX Cassandra

⚡ Nutikas kokkuvõte

Loo ja lisa indeks Cassandra võimaldab filtreerida veergude järgi, mis ei ole primaarvõtme osa. See leht käsitleb käske CREATE INDEX ja DROP INDEX, nimetamisreegleid, saadaolevaid indeksitüüpe ja juhtumeid, kus indeks on vale vastus.

  • 🔎 Miks indeks: Ilma indeksita saab WHERE-klausel viidata ainult primaarvõtme veergudele.
  • ???? ️ Nimetamise reegel: Nimetu indeks luuakse kujul TableName_ColumnName_idx ja see tuleb selle nime järgi kustutada.
  • 🔁 Automaatne hooldus: Olemasolevad read indekseeritakse loomisel ja uued read indekseeritakse kirjutamisel ilma edasiste toiminguteta.
  • 🚫 Piirangud: Primaarvõtme veerud on juba indekseeritud, seega nende sekundaarne indeks lükatakse tagasi.
  • 📉 Kardinaalsus on oluline: Väga kõrge või väga madala kardinaalsusega veerud muudavad indeksi aeglaseks või kasutuks.
  • 🧱 Parem alternatiiv: Eesmärgipäraselt loodud päringutabel annab tavaliselt suuremas mahus teisesest indeksist parema tulemuse.

Indeksi loomine ja kustutamine Cassandra

Cassandra Loo indeks

Käsk 'Loo indeks' loob indeksi kasutaja määratud veerus. Kui andmed veeru kohta, mida soovite indekseerida, on juba olemas, Cassandra loob andmetele indeksid lause 'create index' täitmise ajal.

  • Pärast indeksi loomist Cassandra indekseerib uued andmed andmete sisestamisel automaatselt.
  • Indeksit ei saa primaarvõtmega luua, kuna primaarvõti on juba indekseeritud.
  • Kollektsiooniveergude indeksid on toetatud, kasutades vormi KEYS, VALUES või ENTRIES, olenevalt sellest, mida on vaja otsida.
  • Ilma veerus indekseerimata Cassandra Seda veergu ei saa filtreerida, kui see pole primaarvõti.

Sellepärast veergude filtreerimiseks Cassandra, tuleb luua indeksid.

Süntaks

CREATE INDEX IndexName ON KeyspaceName.TableName (ColumnName);

Näide

Siin on hetktõmmis, kus prooviti veergu "osakond" filtreerida ilma indeksit loomata. Vastuseks tagastati viga.

Cassandra Loo indeks

Siin on hetktõmmis, kus indeks luuakse osakonna veerus.

Cassandra Loo indeks

CREATE INDEX DeptIndex ON University.Student (dept);

Siin on hetktõmmis, kus see edukalt filtreeritakse veerus "osakond".

Cassandra Loo indeks

SELECT * FROM University.Student WHERE dept = 'CS';

Indeksi nimi on valikuline. Selle väljajätmine võimaldab Cassandra genereerib selle automaatselt, mis on oluline siis, kui indeks tuleb hiljem kustutada.

CREATE INDEX IF NOT EXISTS ON University.Student (dept);

Cassandra Kukkumise indeks

Käsk 'Drop index' tühistab määratud indeksi. Kui indeksi loomisel indeksi nime ei antud, on indeksi nimi Tabelinimi_VeeruNimi_idx.

  • Kui indeksit pole, tagastab see veateate, välja arvatud juhul, kui kasutatakse IF EXISTS, mis tagastab no-op.
  • Võtmeruumi nimi tuleb määrata koos indeksi nimega, vastasel juhul otsitakse indeksit praegusest võtmeruumist.

Süntaks

DROP INDEX IF EXISTS KeyspaceName.IndexName;

Näide

Siin on hetktõmmis käivitatud käsust "Drop index", mis tühistab indeksi DeptIndex.

Cassandra Kukkumise indeks

DROP INDEX IF EXISTS University.DeptIndex;

Pärast käsu edukat täitmist eemaldatakse DeptIndex klahviruumist. Nüüd ei saa andmeid veeru osakonna järgi filtreerida.

Enne indeksite eemaldamist kinnitamaks, millised indeksid on olemasping esiteks kirjelda tabelit ja loe väljundi allosas olevaid indeksi definitsioone.

DESCRIBE TABLE University.Student;

Indeksi tüübid Cassandra

Ülaltoodud käsk loob standardse teisese indeksi, kuid eksisteerib kolm erinevat mehhanismi ja need käituvad väga erinevalt.

KASUTUSALA Kuidas see töötab? Parim on
Teisene indeks Iga sõlm indekseerib ainult oma kohalikke andmeid, seega peab partitsioonivõtmeta päring võtma ühendust iga sõlmega. Mõõdukate kardinaalsusega veergude päringud koos partitsioonivõtmega.
SASI indeks Lisatud indeks, mis toetab LIKE ees- ja järelliite vastavust ning numbrilisi vahemikke. Tekstiotsingu mustrid. Ikka veel katsejärgus, seega testige enne tootmiskasutust.
Salvestusruumi lisatud indeks (SAI) Sisseehitatud Cassandra 5.0, jagades ühte indeksistruktuuri veergude vahel väiksema kirjutamiskuluga. Mõlema ülaltoodu kaasaegne asendaja Cassandra 5 klastrit.

Kollektsiooniveeru indekseerimine kasutab modifikaatorit, mis määrab, millist osa indekseerida.

CREATE INDEX ON University.Teacher (VALUES(Email));
CREATE INDEX ON University.Course (KEYS(prereq));
CREATE INDEX ON University.Course (ENTRIES(prereq));

VALUES otsib hulga või loendi elemente, KEYS otsib vastevõtmeid ja ENTRIES leiab võtme ja väärtuse paari. Kollektsiooni indekseerimist käsitletakse lähemalt järgmises jaotises. Cassandra kollektsioonid juhendaja.

Millal mitte kasutada indeksit Cassandra

Teisene indeks on mugav, kuid see ei ole relatsiooniline indeks ja selle kasutamine vales kohas on aeglaste klastrite levinud põhjus. Neli olukorda nõuavad erinevat lähenemist.

  • Väga kõrge kardinaalsus. Millegi peaaegu unikaalsele sarnase (nt e-posti aadressi) indekseerimine tähendab, et peaaegu igas partitsioonis on üks vastav rida, seega hajub päring üle kogu klastri ja tagastab ühe kirje.
  • Väga madal kardinaalsus. Kahe väärtusega lipu (nt aktiivne või mitteaktiivne) indekseerimine loob tohutud indekspartitsioonid ja ühe väärtuse lugemine tagastab poole tabelist.
  • Sageli uuendatavad veerud. Iga muudatusega luuakse registrikirje ja vana hauakivi, seega hauakivide kogunemine halvendab lugemiste kvaliteeti aja jooksul.
  • Päringud ilma partitsioonivõtmeta. Ilma selleta peab koordinaator iga sõlmega ühendust võtma ja tulemused ühendama, mis sõlmede lisamisel ei skaleeru.

Püsiv alternatiiv on teine ​​tabel, mis on võtmestatud otsingut vajava veeru järgi ja kirjutatud samaaegselt esimesega. See järgib päringu-kõigepealt põhimõtet, mida on kirjeldatud jaotises Cassandra andmemudeli reeglidja see hoiab iga lugemise ühele partitsioonile ühel sõlmel.

Tööreeglina sobib indeks mõõduka kardinaalsusega veerule, millele päringu esitatakse koos teadaoleva partitsioonivõtmega. Kõigele, mis sellest kirjeldusest välja jääb, sobib paremini otstarbeks loodud tabel.

KKK

Kindlat piirangut pole, aga iga indeks lisab kirjutamiskulu ja mälu. Kaks või kolm tabeli kohta on praktiline lagi; selle ületamisel tuleks hoopis andmemudel ümber mõelda.

Ei. Olemasolevad read indekseeritakse taustal ja tabel jääb kättesaadavaks. Suurte tabelite töötlemine võtab aega ja edenemist saab jälgida nodetool compactionstats abil.

Indeks osutab tagasi baastabeli ridadele. Materialiseeritud vaade on eraldi tabel, mida hallatakse automaatselt oma partitsioonivõtmega, seega selle lugemised tabavad ühte partitsiooni.

Arvestades päringute loendit ja veergude arvu, saab tehisintellekt kandidaate mõistlikult järjestada. See ei näe värskendamise sagedust, mis sageli määrab, kas indeks kogub hauakive.

Tihtilugu seetõttu, et see käivitab tagasilükatud päringu. Käsitle seda soovitust kui signaali, et kas indeksit või uut päringutabelit on tõesti vaja.

Võta see postitus kokku järgmiselt: