Sdílet prostřednictvím


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

PLATÍ PRO: Cassandra

Rozhraní API pro Cassandra ve službě Azure Cosmos DB využívá základní infrastrukturu indexování k zveřejnění síly indexování, která je součástí platformy. 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í k vytvoření indexu u určitých atributů, 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. Je nutné použít explicitně syntaxi POVOLIT FILTROVÁNÍ, což vede k operaci, která nemusí dobře fungovat. Ve službě Azure Cosmos DB můžete takové dotazy spouštět u atributů s nízkou kardinalitou, protože se rozdávají napříč oddíly a načítají výsledky.

Nedoporučuje se vytvářet indexy u často aktualizovaného sloupce. Při definování tabulky je vhodné vytvořit index. Tím se zajistí, že data a indexy jsou v konzistentním stavu. V případě, že pro existující data vytvoříte nový index, v současné době nemůžete sledovat změnu průběhu indexu pro tabulku. Pokud potřebujete sledovat průběh této operace, musíte požádat o změnu průběhu prostřednictvím lístku podpory.

Poznámka:

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

  • datové typy, jako jsou typy zmrazených kolekcí, desetinné číslo a variantní typy.
  • Statické sloupce
  • Klíče clusteringu

Upozorňující

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 filtrujete klíč oddílu a klíč clusteringu, nebo jenom klíč oddílu, získáte požadované chování. Pokud ale filtrujete klíč oddílu a všechna ostatní neindexovaná pole kromě klíče clusteringu, dojde k tomu, že se klíč oddílu vyfiltruje – i když ostatní neindexovaná pole mají sekundární index. Pokud máte v tabulce složený primární klíč a chcete filtrovat prvek hodnoty klíče oddílu složeného primárního klíče a další pole, které není klíčem oddílu nebo klíčem clusteringu, ujistěte se, že do klíče oddílu explicitně přidáte 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íčů bez oddílů a klíčů bez clusteringu nemají žádný index. Další informace najdete v našem č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, dojde k chybě, 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 funkci POVOLIT FILTROVÁNÍ, jak je uvedeno v předchozí části, nedoporučuje se. Místo toho byste měli vytvořit index v následujícím příkladu:

CREATE INDEX ON sampleks.t1 (lastname);

Po vytvoření indexu v poli lastname 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 . Jedná se například t1_lastname_idx o název indexu předchozí tabulky.

Vyřazení indexu

Potřebujete vědět, o jaký název indexu se má index umístit. Spuštěním desc schema příkazu získejte popis tabulky. Výstup tohoto příkazu zahrnuje název indexu ve formátu CREATE INDEX tablename_columnname_idx ON keyspacename.tablename(columnname). Název indexu pak můžete použít k přetažení indexu, jak je znázorněno v následujícím příkladu:

drop index sampleks.t1_lastname_idx;

Další kroky