Share via


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!

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 partitionsnyckel ä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 de dokument som ska tas bort inte visas i resultatet av frågor eller läsåtgärder.

Åtgärden ta bort av partitionsnyckeln är begränsad till att förbruka högst 10 % av det totala antalet tillgängliga RU/s i containern varje sekund. Detta hjälper dig att begränsa de resurser som används av den här bakgrundsaktiviteten.

Komma igång

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

  • Steg 1: Ange gränssnittsvariabler

        $resourceGroupName = <azure_resource_group>
        $accountName = <azure_cosmos_db_account_name>
        $DeleteByPk = "DeleteAllItemsByPartitionKey"
    
  • Steg 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 
    
  • Steg 3: Lägg till funktionen "Ta bort objekt efter partitionsnyckel" i listan över funktioner om den inte redan finns.

    Kommentar

    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
    
  • Steg 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

Använd version 3.25.0-preview (eller en högre förhandsversion) av Azure Cosmos DB .NET SDK för att ta bort objekt med partitionsnyckel.

// 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

Återspeglas resultatet av borttagningen av partitionsnyckeln 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 åtgärden delete by partition key utfärdas tas endast de dokument som finns i containern och sedan med partitionsnyckelvärdet bort. Alla nya dokument som kommer in kommer inte att finnas i omfånget för borttagningen.

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

Som standard kan åtgärden ta bort efter partitionsnyckel använda upp till ett reserverat bråk – 0,1 eller 10 % – av den totala RU/s på 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 etablerat 1 000 RU/s på en container. Det finns en pågående borttagning av partitionsnyckelåtgärden som förbrukar 100 RU:er varje sekund i 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 scenarier kan det hända att 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 till tidpunkt) – en återställning som utlöses under en pågående borttagning av partitionsnyckelåtgärden kan innehålla resultatet av de dokument som ska tas bort 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, 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/stat/stad. Om du försöker ta bort med hjälp av mellanliggande partitionsnycklar, till exempel land/stat eller enbart land, uppstår 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-preview (måste vara förhandsversion) https://www.nuget.org/packages/Microsoft.Azure.Cosmos/
Java SDK v4 >= 4.19.0 (API är markerat som beta) https://mvnrepository.com/artifact/com.azure/azure-cosmos
Python SDK v4 >= 4..4.0b1 (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

Läs följande artiklar om du vill veta mer om SDK-åtgärder i Azure Cosmos DB.