Luo ja pudota INDEX Cassandra

⚡ Älykäs yhteenveto

Luo ja pudota indeksi Cassandra mahdollistaa suodatuksen sarakkeissa, jotka eivät ole osa ensisijaista avainta. Tämä sivu käsittelee CREATE INDEX- ja DROP INDEX -komentoja, nimeämissääntöjä, käytettävissä olevia indeksityyppejä ja tapauksia, joissa indeksi on väärä vastaus.

  • 🔎 Miksi indeksi: Ilman indeksiä WHERE-lauseke voi viitata vain ensisijaisiin avainsarakkeisiin.
  • 🏷️ Nimeämissääntö: Nimeämätön indeksi luodaan nimellä TableName_ColumnName_idx, ja se on poistettava kyseisen nimen perusteella.
  • 🔁 Automaattinen ylläpito: Olemassa olevat rivit indeksoidaan luonnin yhteydessä ja uudet rivit indeksoidaan kirjoituksen yhteydessä ilman lisätoimenpiteitä.
  • 🚫 rajoitukset: Ensisijaiset avainsarakkeet on jo indeksoitu, joten niihin liittyvä toissijainen indeksi hylätään.
  • 📉 Kardinaliteetilla on merkitystä: Hyvin korkean tai hyvin matalan kardinaliteettiasteikon omaavat sarakkeet tekevät indeksistä hitaan tai hyödyttömän.
  • 🧱 Parempi vaihtoehto: Tarkoitukseen rakennettu kyselytaulukko suoriutuu yleensä skaalautuvasti toissijaista indeksiä paremmin.

Luo ja pudota indeksi Cassandra

Cassandra Luo hakemisto

Komento "Create index" luo indeksin käyttäjän määrittelemään sarakkeeseen. Jos indeksoitavan sarakkeen tiedot ovat jo olemassa, Cassandra luo indeksejä dataan "create index" -käskyn suorittamisen aikana.

  • Indeksin luomisen jälkeen Cassandra indeksoi uudet tiedot automaattisesti, kun tietoja lisätään.
  • Indeksiä ei voida luoda ensisijaiselle avaimelle, koska ensisijainen avain on jo indeksoitu.
  • Kokoelmasarakkeiden indeksejä tuetaan KEYS-, VALUES- tai ENTRIES-lomakkeen avulla riippuen siitä, mitä on haettava.
  • Ilman indeksointia sarakkeeseen, Cassandra Saraketta ei voi suodattaa, ellei se ole ensisijainen avain.

Siksi sarakkeiden suodattamiseen Cassandra, indeksit on luotava.

Syntaksi

CREATE INDEX IndexName ON KeyspaceName.TableName (ColumnName);

esimerkki

Tässä on tilannekuva, jossa yritettiin suodattaa "dept" -saraketta luomatta hakemistoa. Vastauksena virhe palautettiin.

Cassandra Luo hakemisto

Tässä on tilannekuva, jossa indeksi luodaan osastosarakkeeseen.

Cassandra Luo hakemisto

CREATE INDEX DeptIndex ON University.Student (dept);

Tässä on tilannekuva, jossa se suodatetaan onnistuneesti "osasto"-sarakkeessa.

Cassandra Luo hakemisto

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

Indeksin nimi on valinnainen. Sen poisjättäminen antaa Cassandra luo sellaisen automaattisesti, millä on merkitystä, kun indeksi on myöhemmin poistettava.

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

Cassandra Pudota indeksi

Komento "Drop index" pudottaa määritetyn indeksin. Jos indeksin nimeä ei annettu indeksin luomisen aikana, indeksin nimi on TaulukonNimi_SarakkeenNimi_idx.

  • Jos indeksiä ei ole, se palauttaa virheilmoituksen, ellei IF EXISTS -toimintoa käytetä, joka palauttaa no-op.
  • Sinun on määritettävä avainavaruuden nimi indeksin nimen kanssa, muuten indeksiä etsitään nykyisestä avainavaruudesta.

Syntaksi

DROP INDEX IF EXISTS KeyspaceName.IndexName;

esimerkki

Tässä on tilannekuva suoritetusta komennosta "Drop index", joka pudottaa indeksin DeptIndexin.

Cassandra Pudota indeksi

DROP INDEX IF EXISTS University.DeptIndex;

Onnistuneen komennon suorittamisen jälkeen DeptIndex pudotetaan näppäinavaruudesta. Nyt tietoja ei voi suodattaa sarakeosaston mukaan.

Vahvistaaksesi, mitkä indeksit ovat olemassa ennen pudottamistaping yksi, kuvaile taulukko ja lue tulosteen alareunassa olevat indeksimääritelmät.

DESCRIBE TABLE University.Student;

Indeksityypit Cassandra

Yllä oleva komento luo standardin mukaisen toissijaisen indeksin, mutta on olemassa kolme erillistä mekanismia, ja ne käyttäytyvät hyvin eri tavalla.

Tyyppi Kuinka se toimii Parasta
Toissijainen indeksi Jokainen solmu indeksoi vain omat paikalliset tietonsa, joten kyselyn, jossa ei ole osioavainta, on otettava yhteyttä jokaiseen solmuun. Kohtalaisen kardinaalisuuden sarakkeita haetaan osioavaimen rinnalla.
SASI-indeksi Liitetty indeksi, joka tukee LIKE-etuliitteiden ja -päätteiden täsmäytystä sekä numeerisia alueita. Tekstihakumallit. Vielä kokeellinen, joten testaa ennen tuotantokäyttöä.
Tallennustilaan liitetty indeksi (SAI) Esiteltiin sisään Cassandra 5.0, jakaen yhden indeksirakenteen sarakkeiden kesken pienemmällä kirjoituskululla. Molempien edellä mainittujen moderni korvaaja Cassandra 5 klusteria.

Kokoelmasarakkeen indeksoinnissa käytetään muokkaajaa, joka määrittää, mikä osa indeksoidaan.

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

VALUES etsii joukon tai listan alkioista, KEYS etsii kartoitusavaimista ja ENTRIES yhdistää avain- ja arvoparin. Kokoelman indeksointia käsitellään tarkemmin seuraavassa. Cassandra kokoelmat opetusohjelma.

Milloin indeksiä ei pidä käyttää Cassandra

Toissijainen indeksi on kätevä, mutta se ei ole relaatioindeksi, ja sen käyttäminen väärässä paikassa on yleinen syy klusterien hitauteen. Neljä tilannetta vaatii erilaista lähestymistapaa.

  • Erittäin korkea kardinaliteetti. Lähes yksilöllisen kohteen, kuten sähköpostiosoitteen, indeksointi tarkoittaa, että lähes jokaisessa osiossa on yksi vastaava rivi, joten kysely leviää koko klusteriin ja palauttaa yhden tietueen.
  • Hyvin alhainen kardinaliteetti. Kaksiarvoisen lipun, kuten active tai inactive, indeksointi tuottaa valtavia indeksiosioita, ja yhden lukeminen palauttaa puolet taulukosta.
  • Usein päivitettävät sarakkeet. Jokainen muutos kirjoittaa hakemistomerkinnän ja hautakiven vanhan tilalle, joten hautakivien kertyminen heikentää lukutehoa ajan myötä.
  • Kyselyt ilman osioavainta. Ilman sitä koordinaattorin on otettava yhteyttä jokaiseen solmuun ja yhdistettävä tulokset, mikä ei skaalaudu solmujen lisäyksen myötä.

Kestävä vaihtoehto on toinen taulukko, jonka avain on haettavan sarakkeen mukaan ja joka kirjoitetaan samaan aikaan ensimmäisen kanssa. Tämä noudattaa kysely ensin -periaatetta, joka on kuvattu kohdassa Cassandra datamallin säännöt, ja se pitää jokaisen lukeman yhdessä osiossa yhdessä solmussa.

Toimivana sääntönä indeksi sopii kohtuullisen kardinaalisuudeltaan kohtuulliseen sarakkeeseen, jota kyselyssä käytetään yhdessä tunnetun osioavaimen kanssa. Kaikkeen tämän kuvauksen ulkopuoliseen sopii paremmin tarkoitukseen rakennettu taulukko.

UKK

Ei ole mitään kiinteää rajaa, mutta jokainen indeksi lisää kirjoituskustannuksia ja muistia. Kaksi tai kolme taulukkoa kohden on käytännöllinen yläraja; sen lisäksi kannattaa harkita uudelleen datamallia.

Ei. Olemassa olevat rivit indeksoidaan taustalla ja taulukko pysyy käytettävissä. Suurten taulukoiden käsittely vie aikaa, ja edistymistä voi seurata nodetool compactionstats -komennolla.

Indeksi viittaa takaisin perustaulukon riveihin. Materialisoitu näkymä on erillinen taulukko, jota ylläpidetään automaattisesti omalla osioavaimellaan, joten sen lukemat osuvat yhteen osioon.

Kyselylistan ja sarakekardinaliteetin perusteella tekoäly voi asettaa ehdokkaat järjestykseen. Se ei kuitenkaan näe päivitystiheyttä, joka usein ratkaisee, kerääkö indeksi hakukiviä.

Usein siksi, että se suorittaa hylätyn kyselyn. Pidä tätä ehdotusta merkkinä siitä, että joko indeksi tai uusi kyselytaulukko on todella tarpeen.

Tiivistä tämä viesti seuraavasti: