Indeksowanie pomocnicze w usłudze Azure Cosmos DB dla bazy danych Apache Cassandra
DOTYCZY: Kasandra
Interfejs API dla bazy danych Cassandra w usłudze Azure Cosmos DB wykorzystuje podstawową infrastrukturę indeksowania, aby uwidocznić siłę indeksowania, która jest nieodłączna dla platformy. Jednak w przeciwieństwie do podstawowego interfejsu API noSQL interfejs API dla bazy danych Cassandra w usłudze Azure Cosmos DB nie indeksuje domyślnie 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ń filtru w kolumnach, które nie są partycjonowane. Należy jawnie użyć składni ZEZWALAJ NA FILTROWANIE, co powoduje, że operacja, która może nie działać prawidłowo. 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. Warto utworzyć indeks 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 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, dziesiętne 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 wyświetlenie fan-out 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 obiekcie , 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;