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.

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.
Itt látható az a pillanatkép, ahol az index létrejön a részleg oszlopában.
CREATE INDEX DeptIndex ON University.Student (dept);
Itt a pillanatkép, ahol sikeresen szűrjük a „rész” oszlopban.
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.
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.




