Indeksowanie pomocnicze w usłudze Azure Cosmos DB dla bazy danych Apache Cassandra

DOTYCZY: Cassandra

Interfejs API dla bazy danych Cassandra w usłudze Azure Cosmos DB korzysta z podstawowej infrastruktury indeksowania, aby uwidocznić siłę indeksowania, która jest związana z platformą. Jednak w przeciwieństwie do podstawowego interfejsu API noSQL interfejs API dla bazy danych Cassandra w usłudze Azure Cosmos DB domyślnie nie indeksuje wszystkich atrybutów. Zamiast tego obsługuje indeksowanie pomocnicze w celu utworzenia indeksu dla niektórych atrybutów, który zachowuje się tak samo jak apache Cassandra.

Ogólnie rzecz biorąc, nie zaleca się wykonywania zapytań filtrów w kolumnach, które nie są partycjonowane. Należy jawnie użyć składni ALLOW FILTERING, co powoduje, że operacja, która może nie działać dobrze. W usłudze Azure Cosmos DB można uruchamiać takie zapytania dotyczące atrybutów o niskiej kardynalności, ponieważ są one rozsyłane między partycjami w celu pobrania wyników.

Nie zaleca się tworzenia indeksu w często aktualizowanej kolumnie. Rozsądne jest utworzenie indeksu podczas definiowania tabeli. Dzięki temu dane i indeksy są w stanie spójnym. W przypadku utworzenia nowego indeksu dla istniejących danych obecnie nie można śledzić zmiany postępu indeksu dla tabeli. Jeśli musisz śledzić postęp tej operacji, musisz zażądać zmiany postępu za pośrednictwem biletu pomocy technicznej.

Uwaga

Indeksy pomocnicze można tworzyć tylko przy użyciu poleceń języka CQL wymienionych w tym artykule, a nie za pośrednictwem narzędzi dostawcy zasobów (szablony usługi ARM, interfejs wiersza polecenia platformy Azure, program PowerShell lub terraform). Indeksy pomocnicze nie są obsługiwane w następujących obiektach:

  • typy danych, takie jak zamrożone typy kolekcji, liczba dziesiętna i typy wariantów.
  • Kolumny statyczne
  • Klucze klastrowania

Ostrzeżenie

Klucze partycji nie są domyślnie indeksowane w interfejsie API dla bazy danych Cassandra. Jeśli w tabeli masz złożony klucz podstawowy i filtrujesz klucz partycji i klucz klastrowania lub po prostu klucz partycji, zapewni to pożądane zachowanie. Jeśli jednak filtrujesz według klucza partycji i innych nieindeksowanych pól poza kluczem klastrowania, spowoduje to wydymanie klucza partycji — nawet jeśli inne pola nieindeksowane mają indeks pomocniczy. Jeśli w tabeli znajduje się złożony klucz podstawowy i chcesz filtrować zarówno element wartości klucza partycji złożonego klucza podstawowego, jak i inne pole, które nie jest kluczem partycji lub kluczem klastrowania, upewnij się, że jawnie dodano indeks pomocniczy w kluczu partycji. Indeks w tym scenariuszu powinien znacznie poprawić wydajność zapytań, nawet jeśli inne pola klucza innego niż partycja i klucz inny niż klaster nie mają indeksu. Aby uzyskać więcej informacji, zapoznaj się z naszym artykułem dotyczącym partycjonowania .

Przykład indeksowania

Najpierw utwórz przykładową przestrzeń kluczy i tabelę, uruchamiając następujące polecenia w wierszu polecenia powłoki CQL:

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

Następnie wstaw przykładowe dane użytkownika przy użyciu następujących poleceń:

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

Jeśli spróbujesz wykonać następującą instrukcję, wystąpi błąd z prośbą o użycie polecenia ALLOW FILTERING:

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

Mimo że interfejs API dla bazy danych Cassandra obsługuje filtrowanie ZEZWÓL, jak wspomniano w poprzedniej sekcji, nie jest to zalecane. Zamiast tego należy utworzyć indeks w pliku , jak pokazano w poniższym przykładzie:

CREATE INDEX ON sampleks.t1 (lastname);

Po utworzeniu indeksu w polu "lastname" możesz teraz pomyślnie uruchomić poprzednie zapytanie. W przypadku interfejsu API dla bazy danych Cassandra w usłudze Azure Cosmos DB nie trzeba podawać nazwy indeksu. Używany jest domyślny indeks z formatem tablename_columnname_idx . Na przykład t1_lastname_idx to nazwa indeksu poprzedniej tabeli.

Usuwanie indeksu

Musisz wiedzieć, jaka jest nazwa indeksu, aby usunąć indeks. Uruchom polecenie , desc schema aby uzyskać opis tabeli. Dane wyjściowe tego polecenia zawierają nazwę indeksu w formacie CREATE INDEX tablename_columnname_idx ON keyspacename.tablename(columnname). Następnie możesz użyć nazwy indeksu, aby usunąć indeks, jak pokazano w poniższym przykładzie:

drop index sampleks.t1_lastname_idx;

Następne kroki