Creați și plasați INDEX în Cassandra

⚡ Rezumat inteligent

Creați și plasați indexul în Cassandra permite filtrarea pe coloane care nu fac parte din cheia primară. Această pagină prezintă comenzile CREATE INDEX și DROP INDEX, regulile de denumire, tipurile de index disponibile și cazurile în care un index este răspunsul greșit.

  • 🔎 De ce Index: Fără un index, o clauză WHERE poate face referire doar la coloane de cheie primară.
  • 🏷️ Regula de denumire: Un index fără nume este creat ca TableName_ColumnName_idx și trebuie eliminat după acel nume.
  • 🔁 Întreținere automată: Rândurile existente sunt indexate la creare, iar rândurile noi sunt indexate la scriere fără nicio altă acțiune.
  • 🚫 restricţii: Coloanele cheie primare sunt deja indexate, deci un index secundar pe acestea este respins.
  • 📉 Cardinalitatea contează: Coloanele cu cardinalitate foarte mare sau foarte mică fac un index lent sau inutil.
  • 🧱 Alternativă mai bună: Un tabel de interogări construit special are de obicei performanțe mai bune decât un index secundar la scară largă.

Creați și plasați indexul în Cassandra

Cassandra Creați index

Comanda „Creare index” creează un index pe coloana specificată de utilizator. Dacă datele există deja pentru coloana pe care doriți să o indexați, Cassandra creează indecși asupra datelor în timpul executării instrucțiunii „create index”.

  • După crearea unui index, Cassandra indexează automat datele noi atunci când sunt introduse.
  • Indexul nu poate fi creat pe cheia primară, deoarece o cheie primară este deja indexată.
  • Indexurile pe coloanele colecției sunt acceptate, utilizând formularele KEYS, VALUES sau ENTRIES, în funcție de ceea ce trebuie căutat.
  • Fără indexare pe coloană, Cassandra Nu se poate filtra acea coloană decât dacă este o cheie primară.

De aceea, pentru filtrarea coloanelor în Cassandra, trebuie creați indexuri.

Sintaxă

CREATE INDEX IndexName ON KeyspaceName.TableName (ColumnName);

Exemplu

Iată instantaneul în care s-a încercat să filtreze coloana „dept” fără a crea indexul. Ca răspuns, eroarea a fost returnată.

Cassandra Creați index

Aici este instantaneul în care este creat indexul pe coloana dept.

Cassandra Creați index

CREATE INDEX DeptIndex ON University.Student (dept);

Iată instantaneul în care va fi filtrată cu succes coloana „dept”.

Cassandra Creați index

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

Numele indexului este opțional. Omiterea lui permite Cassandra va genera unul automat, ceea ce contează atunci când indexul trebuie ulterior eliminat.

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

Cassandra Indicele de picături

Comanda „Drop index” scade indexul specificat. Dacă numele indexului nu a fost dat în timpul creării indexului, atunci numele indexului este TableName_ColumnName_idx.

  • Dacă indexul nu există, va returna o eroare, cu excepția cazului în care se folosește IF EXISTS, care va returna no-op.
  • Trebuie să specificați numele spațiului cheie împreună cu numele indexului, altfel indexul va fi căutat în spațiul cheie curent.

Sintaxă

DROP INDEX IF EXISTS KeyspaceName.IndexName;

Exemplu

Iată instantaneul comenzii executate „Drop index” care scade indexul DeptIndex.

Cassandra Indicele de picături

DROP INDEX IF EXISTS University.DeptIndex;

După executarea cu succes a comenzii, DeptIndex va fi eliminat din spațiul de taste. Acum datele nu pot fi filtrate de departamentul de coloană.

Pentru a confirma ce indexuri există înainte de eliminareping Unu, descrieți tabelul și citiți definițiile indexului din partea de jos a rezultatului.

DESCRIBE TABLE University.Student;

Tipuri de index în Cassandra

Comanda de mai sus creează un index secundar standard, dar există trei mecanisme distincte, care se comportă foarte diferit.

Tip Abordarea Noastră Cel mai bun pentru
Index secundar Fiecare nod indexează doar propriile date locale, așadar o interogare fără o cheie de partiție trebuie să contacteze fiecare nod. Coloane cu cardinalitate moderată interogate alături de o cheie de partiție.
Indicele SASI Un index atașat care permite potrivirea prefixelor și sufixelor LIKE, plus intervale numerice. Modele de căutare text. Încă marcate ca experimentale, așa că testați înainte de utilizarea în producție.
Index atașat la stocare (SAI) Introdus în Cassandra 5.0, partajând o structură de index pe coloane cu costuri suplimentare de scriere mai mici. Înlocuitorul modern pentru ambele de mai sus pe Cassandra 5 clustere.

Indexarea unei coloane de colecție utilizează un modificator care specifică ce parte trebuie indexată.

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

VALUES caută elementele unui set sau ale unei liste, KEYS caută chei de hartă, iar ENTRIES potrivește o pereche cheie-valoare. Indexarea colecțiilor este prezentată mai detaliat în Cassandra colecții tutorial.

Când nu se utilizează un index în Cassandra

Un index secundar este convenabil, dar nu este un index relațional, iar utilizarea unuia în locul greșit este o cauză frecventă a clusterelor lente. Patru situații necesită o abordare diferită.

  • Cardinalitate foarte mare. Indexarea a ceva aproape unic, cum ar fi o adresă de e-mail, înseamnă că aproape fiecare partiție conține un rând potrivit, astfel încât interogarea se extinde pe întregul cluster pentru a returna o singură înregistrare.
  • Cardinalitate foarte scăzută. Indexarea unui indicator cu două valori, cum ar fi activ sau inactiv, produce partiții de index enorme, iar citirea uneia returnează jumătate din tabel.
  • Coloane actualizate frecvent. Fiecare modificare scrie o intrare de index și o piatră tombstone pentru cea veche, astfel încât acumularea de pietre tombstone degradează citirile în timp.
  • Interogări fără cheie de partiție. Fără unul, coordonatorul trebuie să contacteze fiecare nod și să îmbine rezultatele, ceea ce nu se scalează pe măsură ce sunt adăugate noduri.

Alternativa durabilă este un al doilea tabel cu cheie conform coloanei care necesită căutare, scris în același timp cu primul. Aceasta respectă principiul „interogare pe primul loc” descris în Cassandra regulile modelului de dateși păstrează fiecare citire către o singură partiție pe un singur nod.

Ca regulă de lucru, un index se potrivește unei coloane cu cardinalitate moderată care este interogată împreună cu o cheie de partiție cunoscută. Orice element în afara acestei descrieri este mai bine deservit de un tabel special conceput.

Întrebări frecvente

Nu există o limită fixă, dar fiecare index adaugă cost de scriere și memorie. Două sau trei indexuri per tabel reprezintă un plafon practic; dincolo de aceasta, reconsiderați modelul de date.

Nu. Rândurile existente sunt indexate în fundal, iar tabelul rămâne disponibil. Tabelele mari necesită timp, iar progresul poate fi urmărit cu ajutorul nodetool compactationstats.

Un index indică rânduri din tabelul de bază. O vizualizare materializată este un tabel separat, menținut automat cu propria cheie de partiție, astfel încât citirile sale ating o singură partiție.

Având în vedere lista de interogări și cardinalitatea coloanelor, inteligența artificială poate clasifica candidații în mod rezonabil. Nu poate vedea frecvența de actualizare, care decide adesea dacă indexul va acumula elemente neclară (tombstones).

Adesea, deoarece face ca o interogare respinsă să ruleze. Tratați această sugestie ca pe un semnal că este într-adevăr necesar fie un index, fie un nou tabel de interogări.

Rezumați această postare cu: