Sekundární indexování ve službě Azure Cosmos DB for Apache Cassandra

PLATÍ PRO: Cassandra

Rozhraní API pro Cassandra ve službě Azure Cosmos DB využívá základní infrastrukturu indexování ke zveřejnění síly indexování, která je vlastní platformě. Na rozdíl od základního rozhraní API pro NoSQL ale rozhraní API pro Cassandra ve službě Azure Cosmos DB ve výchozím nastavení neindexuje všechny atributy. Místo toho podporuje sekundární indexování pro vytvoření indexu pro určité atributy, který se chová stejně jako Apache Cassandra.

Obecně se nedoporučuje spouštět filtrovací dotazy na sloupce, které nejsou rozdělené na oddíly. Syntaxi POVOLIT FILTROVÁNÍ musíte použít explicitně, což vede k operaci, která nemusí fungovat dobře. Ve službě Azure Cosmos DB můžete takové dotazy spouštět s nízkými atributy kardinality, protože se rozprostřou napříč oddíly a načtou výsledky.

Nedoporučujeme vytvářet index v často aktualizovaném sloupci. Při definování tabulky je vhodné vytvořit index. Tím se zajistí konzistentní stav dat a indexů. Pokud vytvoříte nový index pro existující data, nemůžete momentálně sledovat změnu průběhu indexu pro tabulku. Pokud potřebujete sledovat průběh této operace, musíte o změnu průběhu požádat prostřednictvím lístku podpory.

Poznámka

Sekundární indexy je možné vytvářet pouze pomocí příkazů CQL uvedených v tomto článku, a ne pomocí nástrojů poskytovatele prostředků (šablony ARM, Azure CLI, PowerShell nebo Terraform). Sekundární indexy nejsou podporovány u následujících objektů:

  • datové typy, jako jsou zablokované typy kolekcí, desetinné a variantní typy.
  • Statické sloupce
  • Klíče clusteringu

Upozornění

Klíče oddílů se ve výchozím nastavení v rozhraní API pro Cassandra neindexují. Pokud máte v tabulce složený primární klíč a vyfiltrujete klíč oddílu a klíč clusteringu, nebo jenom klíč oddílu, bude výsledkem požadované chování. Pokud ale kromě klíče clusteringu filtrujete klíč oddílu a všechna další neindexovaná pole, dojde k vyfiltrování klíče oddílu , a to i v případě, že ostatní neindexovaná pole mají sekundární index. Pokud máte v tabulce složený primární klíč a chcete filtrovat jak prvek hodnoty klíče oddílu složeného primárního klíče, tak i další pole, které není klíčem oddílu nebo klíčem clusteringu, ujistěte se, že jste do klíče oddílu explicitně přidali sekundární index. Index v tomto scénáři by měl výrazně zlepšit výkon dotazů, a to i v případě, že ostatní pole klíče bez oddílu a klíče bez clusteringu nemají žádný index. Další informace najdete v článku o dělení .

Příklad indexování

Nejprve vytvořte ukázkový prostor klíčů a tabulku spuštěním následujících příkazů na příkazovém řádku prostředí CQL:

CREATE KEYSPACE sampleks WITH REPLICATION = {'class' : 'SimpleStrategy'};
CREATE TABLE sampleks.t1(user_id int PRIMARY KEY, lastname text) WITH cosmosdb_provisioned_throughput=400;

Pak vložte ukázková uživatelská data pomocí následujících příkazů:

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');

Pokud se pokusíte spustit následující příkaz, narazíte na chybu, která vás vyzve k použití ALLOW FILTERING:

select user_id, lastname from sampleks.t1 where lastname='nishu';

I když rozhraní API pro Cassandra podporuje možnost POVOLIT FILTROVÁNÍ, jak je uvedeno v předchozí části, nedoporučuje se to. Místo toho byste měli vytvořit index v objektu , jak je znázorněno v následujícím příkladu:

CREATE INDEX ON sampleks.t1 (lastname);

Po vytvoření indexu v poli "příjmení" teď můžete úspěšně spustit předchozí dotaz. S rozhraním API pro Cassandra ve službě Azure Cosmos DB nemusíte zadávat název indexu. Použije se výchozí index s formátem tablename_columnname_idx . Je například t1_lastname_idx název indexu pro předchozí tabulku.

Vyřazení indexu

Pokud chcete index odstranit, musíte vědět, jaký je název indexu. Spuštěním desc schema příkazu získejte popis tabulky. Výstup tohoto příkazu obsahuje název indexu ve formátu CREATE INDEX tablename_columnname_idx ON keyspacename.tablename(columnname). Pak můžete použít název indexu k odstranění indexu, jak je znázorněno v následujícím příkladu:

drop index sampleks.t1_lastname_idx;

Další kroky