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.

  • ๐Ÿ”Ž Zaลกto indeksirati: Bez indeksa, WHERE klauzula moลพe referencirati samo stupce primarnog kljuฤa.
  • ๐Ÿท๏ธ Pravilo imenovanja: Neimenovani indeks se kreira kao NazivTablice_NazivStupca_idx i mora se izbrisati pod tim imenom.
  • ๐Ÿ” Automatsko odrลพavanje: Postojeฤ‡i retci se indeksiraju prilikom stvaranja, a novi retci se indeksiraju prilikom pisanja bez daljnjih radnji.
  • ???? Ograniฤenja: Primarni kljuฤni stupci su veฤ‡ indeksirani, pa se sekundarni indeks na njima odbija.
  • ๐Ÿ“‰ Kardinalnost je vaลพna: Stupci s vrlo visokom ili vrlo niskom kardinalnoลกฤ‡u ฤine indeks sporim ili beskorisnim.
  • ๐Ÿงฑ Bolja alternativa: Namjenski izraฤ‘ena tablica upita obiฤno nadmaลกuje sekundarni indeks u veฤ‡em opsegu.

Stvori i ubaci indeks u Cassandra

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.

Cassandra Stvori indeks

Ovdje je snimka gdje je indeks kreiran u stupcu dept.

Cassandra Stvori indeks

CREATE INDEX DeptIndex ON University.Student (dept);

Ovdje je snimka gdje ฤ‡e biti uspjeลกno filtriran 'dept' stupac.

Cassandra Stvori indeks

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.

Cassandra Ispustite indeks

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.

Pitanja i odgovori

Ne postoji ฤvrsto ograniฤenje, ali svaki indeks dodaje troลกkove pisanja i memoriju. Dva ili tri po tablici su praktiฤna granica; nakon toga, umjesto toga, preispitajte model podataka.

Ne. Postojeฤ‡i retci se indeksiraju u pozadini, a tablica ostaje dostupna. Velike tablice zahtijevaju vrijeme, a napredak se moลพe pratiti pomoฤ‡u nodetool compactionstats.

Indeks upuฤ‡uje na retke u osnovnoj tablici. Materijalizirani prikaz je zasebna tablica koja se automatski odrลพava s vlastitim particijskim kljuฤem, tako da njezina ฤitanja pogaฤ‘aju jednu particiju.

S obzirom na popis upita i kardinalnost stupaca, umjetna inteligencija moลพe razumno rangirati kandidate. Ne moลพe vidjeti uฤestalost aลพuriranja, ลกto ฤesto odluฤuje hoฤ‡e li indeks akumulirati nadgrobne spomenike.

ฤŒesto, jer pokreฤ‡e odbijeni upit. Tretirajte taj prijedlog kao signal da je zaista potreban indeks ili nova tablica upita.

Saลพmite ovu objavu uz: