Stvorite i ubacite INDEX Cassandra
โก Pametni saลพetak
Stvori i ubaci indeks u Cassandra omoguฤuje filtriranje stupaca koji nisu dio primarnog kljuฤa. Ova stranica pokriva naredbe CREATE INDEX i DROP INDEX, pravila imenovanja, dostupne vrste indeksa i sluฤajeve kada je indeks pogreลกan odgovor.

Cassandra Stvori indeks
Naredba 'Create index' stvara indeks na stupcu koji odredi korisnik. Ako podaci veฤ postoje za stupac koji ลพelite indeksirati, Cassandra stvara indekse podataka tijekom izvoฤenja naredbe 'create index'.
- Nakon kreiranja indeksa, Cassandra automatski indeksira nove podatke kada se podaci umetnu.
- Indeks se ne moลพe stvoriti na primarnom kljuฤu jer je primarni kljuฤ veฤ indeksiran.
- Podrลพani su indeksi na stupcima kolekcije, koriลกtenjem oblika KEYS, VALUES ili ENTRIES, ovisno o tome ลกto treba pretraลพivati.
- Bez indeksiranja na stupcu, Cassandra Ne moลพe filtrirati taj stupac osim ako nije primarni kljuฤ.
Zato je za filtriranje stupaca u Cassandra, potrebno je kreirati indekse.
Sintaksa
CREATE INDEX IndexName ON KeyspaceName.TableName (ColumnName);
Primjer
Ovdje je snimka na kojoj se pokuลกalo filtrirati stupac "dept" bez stvaranja indeksa. Kao odgovor, vraฤena je pogreลกka.
Ovdje je snimka gdje je indeks kreiran u stupcu dept.
CREATE INDEX DeptIndex ON University.Student (dept);
Ovdje je snimka gdje ฤe biti uspjeลกno filtriran 'dept' stupac.
SELECT * FROM University.Student WHERE dept = 'CS';
Naziv indeksa je opcionalan. Njegovo izostavljanje omoguฤuje Cassandra automatski ga generirati, ลกto je vaลพno kada se indeks kasnije mora izbrisati.
CREATE INDEX IF NOT EXISTS ON University.Student (dept);
Cassandra Ispustite indeks
Naredba 'Drop index' ispuลกta navedeni indeks. Ako ime indeksa nije dano tijekom stvaranja indeksa, tada je ime indeksa TableName_ColumnName_idx.
- Ako indeks ne postoji, vratit ฤe pogreลกku osim ako se ne koristi IF EXISTS koji ฤe vratiti no-op.
- Morate navesti naziv kljuฤnog prostora s nazivom indeksa, inaฤe ฤe se indeks traลพiti u trenutnom kljuฤnom prostoru.
Sintaksa
DROP INDEX IF EXISTS KeyspaceName.IndexName;
Primjer
Ovdje je snimka izvrลกene naredbe 'Drop index' koja ispuลกta indeks DeptIndex.
DROP INDEX IF EXISTS University.DeptIndex;
Nakon uspjeลกnog izvoฤenja naredbe, DeptIndex ฤe biti ispuลกten iz prostora kljuฤeva. Sada se podaci ne mogu filtrirati prema odjelu stupca.
Za potvrdu koji indeksi postoje prije brisanjaping Prvo, opiลกite tablicu i proฤitajte definicije indeksa na dnu ispisa.
DESCRIBE TABLE University.Student;
Vrste indeksa u Cassandra
Gornja naredba stvara standardni sekundarni indeks, ali postoje tri razliฤita mehanizma i oni se ponaลกaju vrlo razliฤito.
| Tip | Kako funkcionira | Najbolje za |
|---|---|---|
| Sekundarni indeks | Svaki ฤvor indeksira samo svoje lokalne podatke, tako da upit bez particijskog kljuฤa mora kontaktirati svaki ฤvor. | Umjereni stupci kardinalnosti upitani su uz kljuฤ particije. |
| SASI indeks | Priloลพeni indeks koji podrลพava podudaranje prefiksa i sufiksa LIKE plus numeriฤke raspone. | Uzorci pretraลพivanja teksta. Joลก uvijek su oznaฤeni kao eksperimentalni, stoga testirajte prije upotrebe u produkciji. |
| Indeks priloลพene pohrane (SAI) | Uveden u Cassandra 5.0, dijeljenje jedne indeksne strukture izmeฤu stupaca s niลพim optereฤenjem pisanja. | Moderna zamjena za oboje gore navedeno Cassandra 5 klastera. |
Indeksiranje stupca kolekcije koristi modifikator koji odreฤuje koji dio treba indeksirati.
CREATE INDEX ON University.Teacher (VALUES(Email)); CREATE INDEX ON University.Course (KEYS(prereq)); CREATE INDEX ON University.Course (ENTRIES(prereq));
VALUES pretraลพuje elemente skupa ili popisa, KEYS pretraลพuje kljuฤeve mapiranja, a ENTRIES usporeฤuje par kljuฤ i vrijednost. Indeksiranje kolekcija detaljnije je opisano u Cassandra kolekcije udลพbenik.
Kada ne koristiti indeks u Cassandra
Sekundarni indeks je praktiฤan, ali nije relacijski indeks, a koriลกtenje na pogreลกnom mjestu ฤest je uzrok sporih klastera. ฤetiri situacije zahtijevaju drugaฤiji pristup.
- Vrlo visoka kardinalnost. Indeksiranje neฤega ลกto je blizu jedinstvenosti, poput adrese e-poลกte, znaฤi da gotovo svaka particija sadrลพi jedan odgovarajuฤi redak, pa se upit ลกiri po cijelom klasteru kako bi vratio jedan zapis.
- Vrlo niska kardinalnost. Indeksiranje zastavice s dvije vrijednosti, kao ลกto su aktivna ili neaktivna, stvara ogromne particije indeksa, a ฤitanje jedne vraฤa polovicu tablice.
- ฤesto aลพurirane kolumne. Svaka promjena zapisuje unos u indeks i tombstone za stari, pa nakupljanje tombstonea s vremenom degradira ฤitanja.
- Upiti bez particijske kljuฤa. Bez njega, koordinator mora kontaktirati svaki ฤvor i spojiti rezultate, ลกto se ne skalira kako se ฤvorovi dodaju.
Trajna alternativa je druga tablica s kljuฤem prema stupcu koji treba pretraลพivati, napisana istovremeno s prvom. To slijedi princip "prvi upit" opisan u Cassandra pravila modela podatakai svako ฤitanje pohranjuje u jednu particiju na jednom ฤvoru.
Kao radno pravilo, indeks odgovara stupcu umjerene kardinalnosti koji se upituje zajedno s poznatim particijskim kljuฤem. Svemu izvan tog opisa bolje odgovara namjenski izgraฤena tablica.




