Hozza létre és dobja be az INDEX-et Cassandra

⚡ Okos összefoglaló

Index létrehozása és eldobása Cassandra lehetővé teszi a szűrést az elsődleges kulcs részét nem képező oszlopokon. Ez az oldal a CREATE INDEX és a DROP INDEX parancsokat, az elnevezési szabályokat, az elérhető indextípusokat, valamint azokat az eseteket tárgyalja, amikor az index a rossz válasz.

  • ???? Miért pont az Index?: Index nélkül a WHERE záradék csak elsődleges kulcs oszlopokra hivatkozhat.
  • 🏷️ Elnevezési szabály: Egy névtelen index jön létre TableName_ColumnName_idx néven, és ezen a néven kell eldobni.
  • 🔁 Automatikus karbantartás: A meglévő sorok létrehozáskor indexelődnek, az új sorok íráskor, további művelet nélkül.
  • ???? Korlátozások: Az elsődleges kulcs oszlopai már indexelve vannak, ezért a másodlagos indexelést elutasítja a rendszer.
  • 📉 Kardinalitási kérdések: A nagyon magas vagy nagyon alacsony kardinalitású oszlopok lassíthatják vagy használhatatlanná tehetik az indexet.
  • 🧱 Jobb alternatíva: Egy célra létrehozott lekérdezési tábla általában jobban teljesít, mint egy másodlagos index nagy léptékben.

Index létrehozása és eldobása Cassandra

Cassandra Index létrehozása

Az „Index létrehozása” parancs létrehoz egy indexet a felhasználó által megadott oszlopban. Ha az indexelni kívánt oszlophoz már léteznek adatok, Cassandra indexeket hoz létre az adatokon az „index létrehozása” utasítás végrehajtása során.

  • Az index létrehozása után Cassandra automatikusan indexeli az új adatokat az adatok beszúrásakor.
  • Az index nem hozható létre az elsődleges kulcson, mivel az elsődleges kulcs már indexelve van.
  • A gyűjteményoszlopokon lévő indexek támogatottak, a KEYS, VALUES vagy ENTRIES űrlap használatával, attól függően, hogy mit kell keresni.
  • Az oszlop indexelése nélkül, Cassandra Az oszlop nem szűrhető, kivéve, ha elsődleges kulcs.

Ezért az oszlopok szűréséhez Cassandra, indexeket kell létrehozni.

Szintaxis

CREATE INDEX IndexName ON KeyspaceName.TableName (ColumnName);

Példa

Itt látható az a pillanatkép, ahol megpróbálták kiszűrni a „dept” oszlopot az index létrehozása nélkül. Válaszul a hibát visszaküldték.

Cassandra Index létrehozása

Itt látható az a pillanatkép, ahol az index létrejön a részleg oszlopában.

Cassandra Index létrehozása

CREATE INDEX DeptIndex ON University.Student (dept);

Itt a pillanatkép, ahol sikeresen szűrjük a „rész” oszlopban.

Cassandra Index létrehozása

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

Az indexnév megadása opcionális. Ha nem hagyja, akkor Cassandra automatikusan generál egyet, ami akkor számít, amikor később az indexet el kell dobni.

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

Cassandra Csepp index

A „Drop index” parancs eldobja a megadott indexet. Ha az indexnév nem lett megadva az index létrehozása során, akkor az index neve Táblanév_Oszlopnév_idx.

  • Ha az index nem létezik, akkor hibaüzenetet ad vissza, kivéve, ha az IF EXISTS értéket használja, amely a no-op értéket adja vissza.
  • A kulcsterület nevét az index nevével együtt kell megadni, különben az indexet az aktuális kulcsterületen fogja keresni a rendszer.

Szintaxis

DROP INDEX IF EXISTS KeyspaceName.IndexName;

Példa

Itt látható a végrehajtott „Drop index” parancs pillanatképe, amely eldobja a DeptIndex indexet.

Cassandra Csepp index

DROP INDEX IF EXISTS University.DeptIndex;

A parancs sikeres végrehajtása után a DeptIndex kikerül a kulcstérből. Most az adatokat nem lehet szűrni az oszloposztály szerint.

Annak megerősítése, hogy mely indexek léteznek a drop előttping egy, írd le a táblázatot, és olvasd el az indexdefiníciókat a kimenet alján.

DESCRIBE TABLE University.Student;

Indextípusok Cassandra

A fenti parancs egy szabványos másodlagos indexet hoz létre, de három különböző mechanizmus létezik, és ezek nagyon eltérően viselkednek.

típus Hogyan működik? A legjobb
Másodlagos index Minden csomópont csak a saját helyi adatait indexeli, így egy partíciós kulcs nélküli lekérdezésnek minden csomóponttal kapcsolatba kell lépnie. Mérsékelt kardinalitású oszlopok lekérdezése egy partíciós kulcs mellett.
SASI index Egy csatolt index, amely támogatja a LIKE előtag- és utótagegyeztetést, valamint a numerikus tartományokat. Szöveges keresési minták. Még kísérleti állapotban van megjelölve, ezért éles használat előtt tesztelje.
Tárolóhoz csatolt index (SAI) Bevezetés Cassandra 5.0, egyetlen indexstruktúrát megosztva az oszlopok között, alacsonyabb írási terheléssel. A fentiek modern helyettesítője a Cassandra 5 klaszter.

Egy gyűjteményoszlop indexelése egy módosítót használ, amely meghatározza, hogy melyik részt kell indexelni.

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

A VALUES egy halmaz vagy lista elemeit keresi, a KEYS a leképezési kulcsokat, az ENTRIES pedig egy kulcs-érték párt illeszt össze. A gyűjteményindexelést részletesebben a következő részben tárgyaljuk. Cassandra gyűjtemény tutorial.

Mikor ne használjunk indexet Cassandra

Egy másodlagos index kényelmes, de nem relációs index, és a rossz helyen való használata gyakori oka a lassú klaszterezésnek. Négy helyzet igényel eltérő megközelítést.

  • Nagyon magas kardinalitás. Ha valami egyedihez közeli elemet indexelünk, például egy e-mail címet, az azt jelenti, hogy szinte minden partíció egy egyező sort tartalmaz, így a lekérdezés a teljes fürtben szétszóródik, és egyetlen rekordot ad vissza.
  • Nagyon alacsony kardinalitás. Egy kétértékű jelző, például az „active” vagy az „inactive” indexelése hatalmas indexpartíciókat hoz létre, és az egyik kiolvasása a tábla felét adja vissza.
  • Gyakran frissülő oszlopok. Minden módosítás egy indexbejegyzést és egy sírkövet ír a régihez, így a sírkövek felhalmozódása idővel rontja az olvasási teljesítményt.
  • Partíciós kulcs nélküli lekérdezések. Enélkül a koordinátornak minden csomóponttal fel kell vennie a kapcsolatot, és egyesítenie kell az eredményeket, ami nem skálázódik a csomópontok hozzáadásával.

A tartós alternatíva egy második tábla, amelyet a keresendő oszlop kulcsol, és az elsővel egy időben ír. Ez a lekérdezés-először elvet követi, amelyet a következő részben ismertetünk: Cassandra adatmodell-szabályok, és minden beolvasást egyetlen partícióra, egyetlen csomóponton tárol.

Működő szabályként egy index egy mérsékelt kardinalitású oszlophoz igazodik, amelyet egy ismert partíciós kulccsal együtt kérdeznek le. Bármi, ami ezen a leíráson kívül esik, jobban megfelel egy erre a célra létrehozott tábla.

GYIK

Nincs szigorú korlát, de minden index írási költséget és memóriát ad hozzá. Táblázatonként kettő vagy három a gyakorlati korlát; ezen túl érdemes újragondolni az adatmodellt.

Nem. A meglévő sorok indexelése a háttérben történik, és a tábla elérhető marad. A nagy táblák időigényesek, és a folyamat a nodetool compactionstats segítségével követhető nyomon.

Egy index az alaptábla soraira mutat vissza. A materializált nézet egy különálló, automatikusan karbantartott tábla, saját partíciós kulccsal, így az olvasásai egy partíciót érintenek.

A lekérdezési lista és az oszlopok kardinalitása alapján a mesterséges intelligencia értelmesen rangsorolhatja a jelölteket. Nem látja a frissítési gyakoriságot, ami gyakran eldönti, hogy az index gyűjt-e sírköveket.

Gyakran azért, mert elutasított lekérdezést futtat. Tekintsd ezt a javaslatot úgy, mint egy jelzést, hogy valóban szükség van egy indexre vagy egy új lekérdezési táblára.

Foglald össze ezt a bejegyzést a következőképpen: