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. Explicit módon kell használnia az ALLOW FILTERING szintaxist, 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ók között futnak az eredmények lekéréséhez.
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 az 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 állapotváltozást.
Megjegyzés
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 a befagyasztott gyűjteménytípusok, a decimális és a 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 található a táblában, és vagy partíciókulcsra és fürtözési kulcsra, vagy csak 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 más nem indexelt mezőkre szűr, az partíciókulcs-kiradigálást eredményez – még akkor is, ha a többi nem indexelt mező másodlagos indexkel rendelkezik. Ha a táblában van egy összetett elsődleges kulcs, és az összetett elsődleges kulcs partíciókulcs-értékelemére, valamint egy másik 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ési teljesítményt, még akkor is, ha a többi nem partíciókulcs- és nem fürtözési kulcsmező nem rendelkezik indexszel. 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 egy táblát a következő parancsok futtatásával a CQL-felület parancssorán:
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 felhasználói mintaadatokat 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, hibaüzenet jelenik meg, amely a használatát ALLOW FILTERING
kéri:
select user_id, lastname from sampleks.t1 where lastname='nishu';
Bár a Cassandra API támogatja az ALLOW FILTERING (ENGEDÉLYEZÉS) szűrést, ahogy azt az előző szakaszban említettük, nem ajánlott. Ehelyett az alábbi példában látható módon hozzon létre egy indexet a mezőben:
CREATE INDEX ON sampleks.t1 (lastname);
Miután létrehozta az 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átummal tablename_columnname_idx
ellátott indexet használ. Például t1_lastname_idx
az előző tábla indexneve.
Az index elvetése
Az index elvetéséhez tudnia kell, hogy mi az index neve. 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