Sekundär indexering i Azure Cosmos DB API för Cassandra
GÄLLER för:
API för Cassandra
Den API för Cassandra i Azure Cosmos DB utnyttjar den underliggande indexeringsinfrastrukturen för att exponera den indexeringsstyrka som är inbyggd i plattformen. Men till skillnad från SQL API:API för Cassandra i Azure Cosmos DB inte alla attribut som standard. I stället stöder den sekundär indexering för att skapa ett index för vissa attribut, som fungerar på samma sätt som Apache Cassandra.
I allmänhet rekommenderar vi inte att du kör filterfrågor på kolumner som inte är partitionerade. Du måste uttryckligen använda ALLOW FILTERING-syntaxen, vilket resulterar i en åtgärd som kanske inte fungerar bra. I Azure Cosmos DB kan du köra sådana frågor på attribut med låg kardinalitet eftersom de för fan ut över partitioner för att hämta resultaten.
Vi rekommenderar inte att du skapar ett index för en kolumn som uppdateras ofta. Det är klokt att skapa ett index när du definierar tabellen. Detta säkerställer att data och index är i ett konsekvent tillstånd. Om du skapar ett nytt index för befintliga data kan du för närvarande inte spåra indexförloppet för tabellen. Om du behöver spåra förloppet för den här åtgärden måste du begära förloppsändringen via en supportbegäran.
Anteckning
Sekundärt index stöds inte på följande objekt:
- datatyper som låsta samlingstyper, decimaler och varianttyper.
- Statiska kolumner
- Klustringsnycklar
Varning
Om du har en sammansatt primärnyckel i tabellen och du bara vill filtrera på partitionsnyckelvärdeelementet för den sammansatta primärnyckeln ser du till att du uttryckligen lägger till ett sekundärt index på partitionsnyckeln. Azure Cosmos DB API för Cassandra inte tillämpar index på partitionsnycklar som standard, och indexet i det här scenariot kan förbättra frågeprestanda avsevärt. Läs vår artikel om partitionering för mer information.
Indexeringsexempel
Skapa först ett exempel på nyckelutrymme och tabell genom att köra följande kommandon i CQL-gränssnittets kommandotolk:
CREATE KEYSPACE sampleks WITH REPLICATION = {'class' : 'SimpleStrategy'};
CREATE TABLE sampleks.t1(user_id int PRIMARY KEY, lastname text) WITH cosmosdb_provisioned_throughput=400;
Infoga sedan exempelanvändardata med följande kommandon:
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');
Om du försöker köra följande instruktion får du ett felmeddelande där du uppmanas att använda ALLOW FILTERING :
select user_id, lastname from sampleks.t1 where lastname='nishu';
Även API för Cassandra stöder TILLÅT FILTRERING, som vi nämnde i föregående avsnitt, rekommenderas det inte. Du bör i stället skapa ett index i som visas i följande exempel:
CREATE INDEX ON sampleks.t1 (lastname);
När du har skapat ett index i fältet "lastname" kan du nu köra den tidigare frågan. Med API för Cassandra i Azure Cosmos DB behöver du inte ange ett indexnamn. Ett standardindex med tablename_columnname_idx format används. Är till t1_lastname_idx exempel indexnamnet för föregående tabell.
Ta bort indexet
Du behöver veta vad indexnamnet är för att ta bort indexet. Kör kommandot desc schema för att hämta beskrivningen av tabellen. Kommandots utdata innehåller indexnamnet i formatet CREATE INDEX tablename_columnname_idx ON keyspacename.tablename(columnname) . Du kan sedan använda indexnamnet för att ta bort indexet enligt följande exempel:
drop index sampleks.t1_lastname_idx;
Nästa steg
- Lär dig hur automatisk indexering fungerar i Azure Cosmos DB
- Apache Cassandra-funktioner som stöds av Azure Cosmos DB Cassandra-API