Megosztás a következőn keresztül:


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 FILTERINGa 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