Másodlagos indexelés az Apache Cassandra-hoz készült Azure Cosmos DB-ben
A KÖVETKEZŐKRE VONATKOZIK: Cassandra
Az Azure Cosmos DB Cassandra API-ja a mögöttes indexelési infrastruktúrát használja a platformban rejlő indexelési erő felfedéséhez. A NoSQL-hez készült alapvető API-val ellentétben azonban az Azure Cosmos DB Cassandra API-ja alapértelmezés szerint nem indexeli az összes attribútumot. Ehelyett támogatja a másodlagos indexelést, hogy indexet hozzon létre bizonyos attribútumokon, amelyek ugyanúgy viselkednek, mint az Apache Cassandra.
Általában nem ajánlott szűrő lekérdezéseket végrehajtani a nem particionált oszlopokon. A ALLOW FILTERING szintaxist explicit módon kell használnia, ami olyan műveletet eredményez, amely nem feltétlenül működik megfelelően. Az Azure Cosmos DB-ben az ilyen lekérdezéseket alacsony számosságú attribútumokon futtathatja, mivel ezek a partíciókon keresztül lekérik az eredményeket.
Nem ajánlott indexet létrehozni egy gyakran frissített oszlopban. A tábla definiálásakor érdemes indexet létrehozni. Ez biztosítja, hogy az adatok és indexek konzisztens állapotban legyenek. Ha új indexet hoz létre a meglévő adatokon, jelenleg nem követheti nyomon a tábla indexállapot-változását. Ha nyomon kell követnie a művelet előrehaladását, támogatási jegyen keresztül kell kérnie az előrehaladás módosítását.
Feljegyzés
A másodlagos indexek csak a cikkben említett CQL-parancsokkal hozhatók létre, az erőforrás-szolgáltató segédprogramjaival (ARM-sablonok, Azure CLI, PowerShell vagy Terraform) nem. A másodlagos indexek nem támogatottak a következő objektumokon:
- adattípusok, például befagyasztott gyűjteménytípusok, decimális és variánstípusok.
- Statikus oszlopok
- Fürtözési kulcsok
Figyelmeztetés
A partíciókulcsok alapértelmezés szerint nem indexelhetők a Cassandra API-ban. Ha összetett elsődleges kulcs van a táblában, és a partíciókulcsra és a fürtözési kulcsra, vagy csak a partíciókulcsra szűr, ez a kívánt viselkedést fogja eredményezni. Ha azonban a fürtkulccon kívül a partíciókulcsra és az egyéb nem indexelt mezőkre is szűr, ez partíciókulcs-kiépítést eredményez – még akkor is, ha a többi nem indexelt mező másodlagos indexet tartalmaz. Ha összetett elsődleges kulcs van a táblában, és az összetett elsődleges kulcs partíciókulcs-értékelemére, valamint egy másik olyan mezőre szeretne szűrni, amely nem a partíciókulcs vagy a fürtözési kulcs, győződjön meg arról, hogy explicit módon hozzáad egy másodlagos indexet a partíciókulcshoz. Ebben a forgatókönyvben az indexnek jelentősen javítania kell a lekérdezés teljesítményét, még akkor is, ha a többi nem particionálási kulcs és nem fürtöző kulcsmező nem tartalmaz indexet. További információért tekintse át a particionálásról szóló cikket.
Példa indexelésre
Először hozzon létre egy mintakulcsteret és -táblát a következő parancsok futtatásával a CQL-rendszerhéj-parancssorban:
CREATE KEYSPACE sampleks WITH REPLICATION = {'class' : 'SimpleStrategy'};
CREATE TABLE sampleks.t1(user_id int PRIMARY KEY, lastname text) WITH cosmosdb_provisioned_throughput=400;
Ezután szúrjon be mintafelhasználói adatokat a következő parancsokkal:
insert into sampleks.t1(user_id,lastname) values (1, 'nishu');
insert into sampleks.t1(user_id,lastname) values (2, 'vinod');
insert into sampleks.t1(user_id,lastname) values (3, 'bat');
insert into sampleks.t1(user_id,lastname) values (5, 'vivek');
insert into sampleks.t1(user_id,lastname) values (6, 'siddhesh');
insert into sampleks.t1(user_id,lastname) values (7, 'akash');
insert into sampleks.t1(user_id,lastname) values (8, 'Theo');
insert into sampleks.t1(user_id,lastname) values (9, 'jagan');
Ha megpróbálja végrehajtani a következő utasítást, egy olyan hibába ütközik, amely arra kéri, hogy használja ALLOW FILTERING
a következőt:
select user_id, lastname from sampleks.t1 where lastname='nishu';
Bár a Cassandra API támogatja az ENGEDÉLYEZÉS SZŰRÉSt, az előző szakaszban leírtak szerint ez nem ajánlott. Ehelyett hozzon létre egy indexet az alábbi példában látható módon:
CREATE INDEX ON sampleks.t1 (lastname);
Miután létrehozott egy indexet a "vezetéknév" mezőben, sikeresen futtathatja az előző lekérdezést. Az Azure Cosmos DB Cassandra API-jával nem kell indexnevet megadnia. A rendszer egy alapértelmezett formátumot tablename_columnname_idx
tartalmazó indexet használ. Például t1_lastname_idx
az előző tábla indexneve.
Az index elvetése
Tudnia kell, hogy mi az index neve az index elvetéséhez. Futtassa a desc schema
parancsot a tábla leírásának lekéréséhez. A parancs kimenete tartalmazza az index nevét a formátumban CREATE INDEX tablename_columnname_idx ON keyspacename.tablename(columnname)
. Ezután az index nevével elvetheti az indexet az alábbi példában látható módon:
drop index sampleks.t1_lastname_idx;
Következő lépések
- Az automatikus indexelés működése az Azure Cosmos DB-ben
- Az Azure Cosmos DB által az Apache Cassandra számára támogatott Apache Cassandra-funkciók