Ta bort objekt efter partitionsnyckelvärde – API för NoSQL (förhandsversion)

GÄLLER FÖR: NoSQL

Den här artikeln beskriver hur du använder Azure Cosmos DB SDK:er för att ta bort alla objekt efter nyckelvärde för logisk partition.

Viktigt!

Funktionen ta bort objekt efter partitionsnyckelvärde finns i offentlig förhandsversion. Den här funktionen tillhandahålls utan ett serviceavtal. Mer information finns i Kompletterande villkor för användning av Microsoft Azure-förhandsversioner.

Översikt över funktioner

Funktionen ta bort med partitionsnyckeln är en asynkron bakgrundsåtgärd som gör att du kan ta bort alla dokument med samma logiska partitionsnyckelvärde med hjälp av Cosmos SDK.

Eftersom antalet dokument som ska tas bort kan vara stort körs åtgärden i bakgrunden. Även om den fysiska borttagningsåtgärden körs i bakgrunden är effekterna tillgängliga omedelbart eftersom dokumenten som ska tas bort inte visas i resultatet av frågor eller läsåtgärder.

Åtgärden att ta bort med partitionsnyckel syftar till att använda högst 10% av de totala tillgängliga begäransenheter per sekund (RU/s) i containern på bästa möjliga sätt. Detta hjälper till att begränsa de resurser som används av den här bakgrundsaktiviteten.

Kom igång

Uppdatera ditt Azure Cosmos DB-konto för att aktivera funktionen ta bort med partitionsnyckel med hjälp av Azure CLI.

  1. Ange gränssnittsvariabler.

        $resourceGroupName = <azure_resource_group>
        $accountName = <azure_cosmos_db_account_name>
        $DeleteByPk = "DeleteAllItemsByPartitionKey"
    
  2. Visa en lista över befintliga funktioner för ditt konto.

       $cosmosdb = az cosmosdb show \
        --resource-group $resourceGroupName \
        --name $accountName
       $capabilities = ($cosmosdb | ConvertFrom-Json).capabilities 
    
  3. Lägg till funktionen Ta bort objekt efter partitionsnyckel i listan över funktioner om den inte redan finns.

    Anteckning

    Listan över funktioner måste alltid ange alla funktioner som du vill aktivera, inklusive. Detta inkluderar funktioner som redan är aktiverade för det konto som du vill behålla.

       $capabilities = $DeleteByPk
    
  4. Uppdatera Cosmos DB-kontot för att aktivera funktionen Ta bort objekt efter partitionsnyckel .

        az cosmosdb update --capabilities $capabilities \
         -n $accountName -g $resourceGroupName
    

Exempelkod

Om du vill ta bort objekt efter partitionsnyckel använder du version 3.25.0 förhandsversion eller senare av Azure Cosmos DB .NET SDK.

// Suppose our container is partitioned by tenantId, and we want to delete all the data for a particular tenant Contoso

// Get reference to the container
var container = cosmosClient.GetContainer("DatabaseName", "ContainerName");

// Delete by logical partition key
ResponseMessage deleteResponse = await container.DeleteAllItemsByPartitionKeyStreamAsync(new PartitionKey("Contoso"));

 if (deleteResponse.IsSuccessStatusCode) {
    Console.WriteLine($"Delete all documents with partition key operation has successfully started");
}

Vanliga frågor och svar

Speglas resultaten av operationen för borttagning med partitionsnyckel omedelbart?

Ja, när borttagningen av partitionsnyckeln startar visas inte de dokument som ska tas bort i resultatet av frågor eller läsåtgärder. Det innebär också att du kan skriva ett nytt dokument med samma ID och partitionsnyckel som ett dokument som ska tas bort utan att resultera i en konflikt.

Se Kända problem för undantag.

Vad händer om jag utfärdar en borttagning av en partitionsnyckelåtgärd och sedan omedelbart skriver ett nytt dokument med samma partitionsnyckel?

När borttagningsåtgärden med partitionsnyckel utfärdas, raderas endast de dokument som finns i containern med partitionsnyckelvärdet. Alla nya dokument som kommer in finns inte i omfånget för borttagningen.

Hur prioriteras borttagningen av partitionsnyckeln bland andra åtgärder mot containern?

Normalt sett kan borttagning baserat på partitionsnyckelvärde använda upp till en reserverad andel – 0,1 eller 10 % – av den totala RU/s för resursen. Alla enheter för begäranden (RU:er) i den här bucketen som inte används kommer att vara tillgängliga för andra icke-bakgrundsåtgärder, till exempel läsningar, skrivningar och frågor.

Anta till exempel att du har tilldelat 1000 RU/s på en container. Det pågår en borttagningsåtgärd med partitionsnyckel som förbrukar 100 RU:er per sekund under 5 sekunder. Under var och en av dessa 5 sekunder finns det 900 RU:er tillgängliga för icke-bakgrundsdatabasåtgärder. När borttagningen är klar är alla 1 000 RU/s nu tillgängliga igen.

Kända problem

I vissa fall kanske en borttagning av partitionsnyckeln inte omedelbart garanterar dess effekter, och partiell synlighet kan inträffa under åtgärden.

  • Aggregerade frågor som använder indexet , till exempel COUNT-frågor, som utfärdas under en pågående borttagning av partitionsnyckelåtgärden kan innehålla resultatet av de dokument som ska tas bort. Detta kan inträffa tills borttagningsåtgärden är helt slutförd.
  • Frågor som utfärdas mot analysarkivet under en pågående borttagning av partitionsnyckelåtgärden kan innehålla resultatet av de dokument som ska tas bort. Detta kan inträffa tills borttagningsåtgärden är helt slutförd.
  • Kontinuerlig säkerhetskopiering (återställning vid tidpunkt) kan utlösas när en borttagning av partitionsnyckel sker och kan i sådana fall inkludera de dokument som är på väg att raderas i den återställda samlingen. Vi rekommenderar inte att du använder den här förhandsgranskningsfunktionen om du har ett scenario som kräver kontinuerlig säkerhetskopiering.

Begränsningar

Borttagning av hierarkiska partitionsnycklar stöds inte. Den här funktionen tillåter borttagning av objekt enbart baserat på den sista nivån av partitionsnycklar. Tänk dig till exempel ett scenario där en partitionsnyckel består av tre hierarkiska nivåer: land/region, delstat och stad. I det här sammanhanget kan funktionen ta bort av partitionsnycklar användas effektivt genom att ange den fullständiga partitionsnyckeln, som omfattar alla nivåer, nämligen land/region, delstat och stad. Om du försöker ta bort med hjälp av mellanliggande partitionsnycklar, till exempel land/region eller stat, eller enbart land/region, resulterar det i ett fel.

Så här ger du feedback eller rapporterar ett problem/en bugg

Skicka e-post cosmosPkDeleteFeedbk@microsoft.com med frågor eller feedback.

SDK-krav

Hitta den senaste versionen av SDK som stöder den här funktionen.

SDK Versioner som stöds Pakethanterarens länk
.NET SDK v3 3.25.0 eller senare (måste vara förhandsversion) https://www.nuget.org/packages/Microsoft.Azure.Cosmos/
Java SDK v4 4.19.0 eller senare (API markeras som beta) https://mvnrepository.com/artifact/com.azure/azure-cosmos
Python SDK v4 4.4.0b1 eller senare (måste vara betaversion) https://pypi.org/project/azure-cosmos/4.4.0b1/

Stöd för andra SDK:er planeras för framtiden.

Nästa steg