Secundaire indexering in Azure Cosmos DB Cassandra-API

VAN TOEPASSING OP: Cassandra-API

De Cassandra-API in Azure Cosmos DB maakt gebruik van de onderliggende indexeringsinfrastructuur om de indexeringssterkte weer te geven die inherent is aan het platform. In tegenstelling tot de core SQL API worden Cassandra-API in Azure Cosmos DB niet standaard alle kenmerken geïndexeerd. In plaats daarvan wordt secundaire indexering ondersteund om een index te maken voor bepaalde kenmerken, die zich op dezelfde manier gedragen als Apache Cassandra.

Over het algemeen is het niet raadzaam filterquery's uit te voeren op de kolommen die niet zijn gepart partitioneerd. U moet de syntaxis FILTEREN TOESTAAN expliciet gebruiken, wat resulteert in een bewerking die mogelijk niet goed presteert. In Azure Cosmos DB kunt u dergelijke query's uitvoeren op kenmerken met een lage kardinaliteit, omdat deze worden verspreid over partities om de resultaten op te halen.

Het is niet raadzaam om een index te maken voor een kolom die regelmatig wordt bijgewerkt. Het is verstandig om een index te maken wanneer u de tabel definieert. Dit zorgt ervoor dat gegevens en indexen een consistente status hebben. Als u op dit moment een nieuwe index maakt op basis van de bestaande gegevens, kunt u de wijziging in de voortgang van de index voor de tabel niet volgen. Als u de voortgang van deze bewerking wilt bijhouden, moet u de voortgangswijziging aanvragen via een ondersteuningsticket.

Notitie

Secundaire index wordt niet ondersteund op de volgende objecten:

  • gegevenstypen zoals bevroren verzamelingstypen, decimale en varianttypen.
  • Statische kolommen
  • Clusteringsleutels

Waarschuwing

Als u een samengestelde primaire sleutel in uw tabel hebt en u alleen wilt filteren op het element partitiesleutelwaarde van de samengestelde primaire sleutel, moet u expliciet een secundaire index toevoegen aan de partitiesleutel. Azure Cosmos DB Cassandra-API past standaard geen indexen toe op partitiesleutels en de index in dit scenario kan de queryprestaties aanzienlijk verbeteren. Lees ons artikel over partitioneren voor meer informatie.

Voorbeeld van indexeren

Maak eerst een voorbeeld van een keyspace en tabel door de volgende opdrachten uit te voeren op de CQL-shellprompt:

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

Voeg vervolgens voorbeeldgebruikersgegevens in met de volgende opdrachten:

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

Als u de volgende instructie probeert uit te voeren, krijgt u een foutmelding waarin u wordt gevraagd om te ALLOW FILTERING gebruiken:

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

Hoewel de Cassandra-API ondersteuning biedt voor FILTEREN OP TOESTAAN, zoals vermeld in de vorige sectie, wordt dit niet aanbevolen. U moet in plaats daarvan een index maken in de , zoals wordt weergegeven in het volgende voorbeeld:

CREATE INDEX ON sampleks.t1 (lastname);

Nadat u een index hebt gemaakt in het veld 'lastname', kunt u nu de vorige query uitvoeren. Met Cassandra-API in Azure Cosmos DB hoeft u geen indexnaam op te geven. Er wordt een standaardindex met tablename_columnname_idx indeling gebruikt. Is bijvoorbeeld t1_lastname_idx de indexnaam voor de vorige tabel.

De index laten vallen

U moet weten wat de naam van de index is om de index te laten vallen. Voer de desc schema opdracht uit om de beschrijving van uw tabel op te halen. De uitvoer van deze opdracht bevat de indexnaam in de notatie CREATE INDEX tablename_columnname_idx ON keyspacename.tablename(columnname) . U kunt vervolgens de indexnaam gebruiken om de index te laten vallen, zoals wordt weergegeven in het volgende voorbeeld:

drop index sampleks.t1_lastname_idx;

Volgende stappen