Items verwijderen op partitiesleutelwaarde - API voor NoSQL (preview)
VAN TOEPASSING OP: NoSQL
In dit artikel wordt uitgelegd hoe u de Azure Cosmos DB SDK's gebruikt om alle items te verwijderen op logische partitiesleutelwaarde.
Belangrijk
Items verwijderen op partitiesleutelwaarde bevindt zich in openbare preview. Deze functie wordt geleverd zonder service level agreement. Zie Aanvullende gebruiksvoorwaarden voor Microsoft Azure-previews voor meer informatie.
Overzicht van de functies
De functie verwijderen door partitiesleutel is een asynchrone achtergrondbewerking waarmee u alle documenten met dezelfde logische partitiesleutelwaarde kunt verwijderen met behulp van de Cosmos SDK.
Omdat het aantal documenten dat moet worden verwijderd, groot kan zijn, wordt de bewerking op de achtergrond uitgevoerd. Hoewel de fysieke verwijderingsbewerking op de achtergrond wordt uitgevoerd, zijn de effecten onmiddellijk beschikbaar, omdat de documenten die moeten worden verwijderd, niet worden weergegeven in de resultaten van query's of leesbewerkingen.
De verwijdering door partitiesleutelbewerking is bedoeld om maximaal 10% van de totale beschikbare RU/s op de container elke seconde te verbruiken op basis van de beste inspanning . Dit helpt bij het beperken van de resources die door deze achtergrondtaak worden gebruikt.
Aan de slag
Werk uw Azure Cosmos DB-account bij om de functie Verwijderen per partitiesleutel in te schakelen met behulp van Azure CLI.
Stap 1: Shell-variabelen instellen
$resourceGroupName = <azure_resource_group> $accountName = <azure_cosmos_db_account_name> $DeleteByPk = "DeleteAllItemsByPartitionKey"
Stap 2: Geef bestaande mogelijkheden van uw account weer.
$cosmosdb = az cosmosdb show \ --resource-group $resourceGroupName \ --name $accountName $capabilities = ($cosmosdb | ConvertFrom-Json).capabilities
Stap 3: Voeg de mogelijkheid Items verwijderen op partitiesleutel toe in de lijst met mogelijkheden als deze nog niet bestaat.
Notitie
De lijst met mogelijkheden moet altijd alle mogelijkheden opgeven die u wilt inschakelen, inclusief. Dit omvat mogelijkheden die al zijn ingeschakeld voor het account dat u wilt behouden.
$capabilities = $DeleteByPk
Stap 4: Cosmos DB-account bijwerken om de functie Items verwijderen op partitiesleutel in te schakelen
az cosmosdb update --capabilities $capabilities \ -n $accountName -g $resourceGroupName
Voorbeeldcode
Gebruik versie 3.25.0-preview (of een hogere preview-versie) van de Azure Cosmos DB .NET SDK om items te verwijderen op partitiesleutel.
// 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");
}
Veelgestelde vragen
Worden de resultaten van de verwijdering door de partitiesleutelbewerking onmiddellijk weergegeven?
Ja, zodra de bewerking voor het verwijderen van de partitiesleutel is gestart, worden de documenten die moeten worden verwijderd, niet weergegeven in de resultaten van query's of leesbewerkingen. Dit betekent ook dat u een nieuw document met dezelfde id en partitiesleutel kunt schrijven als een document dat moet worden verwijderd zonder dat er een conflict optreedt.
Bekijk bekende problemen voor uitzonderingen.
Wat gebeurt er als ik een verwijderbewerking met een partitiesleutel uitgeeft en vervolgens onmiddellijk een nieuw document met dezelfde partitiesleutel schrijf?
Wanneer de verwijdering door partitiesleutelbewerking wordt uitgegeven, worden alleen de documenten die in de container aanwezig zijn, verwijderd met de partitiesleutelwaarde. Nieuwe documenten die binnenkomen, vallen niet binnen het bereik van de verwijdering.
Hoe wordt de verwijdering op partitiesleutelbewerking geprioriteerd onder andere bewerkingen voor de container?
Standaard kan de bewerking voor verwijderen op partitiesleutelwaarde maximaal een gereserveerde breuk ( 0,1 of 10% ) van de totale RU/s voor de resource verbruiken. Aanvraageenheden (RU's) in deze bucket die niet worden gebruikt, zijn beschikbaar voor andere niet-achtergrondbewerkingen, zoals leesbewerkingen, schrijfbewerkingen en query's.
Stel dat u 1000 RU/s hebt ingericht voor een container. Er is een doorlopende verwijdering door de partitiesleutelbewerking die elke seconde 100 RU's verbruikt gedurende 5 seconden. Gedurende elk van deze vijf seconden zijn er 900 RU's beschikbaar voor niet-back-ground databasebewerkingen. Zodra de verwijderbewerking is voltooid, zijn alle 1000 RU/s weer beschikbaar.
Bekende problemen
In sommige scenario's kan een verwijdering door partitiesleutelbewerking niet onmiddellijk garanderen dat dit gevolgen heeft en kan gedeeltelijke zichtbaarheid optreden tijdens de bewerking.
- Statistische query's die gebruikmaken van de index, bijvoorbeeld COUNT-query's, die worden uitgegeven tijdens een doorlopende verwijdering door partitiesleutelbewerking, kunnen de resultaten bevatten van de documenten die moeten worden verwijderd. Dit kan gebeuren totdat de verwijderbewerking volledig is voltooid.
- Query's die zijn uitgegeven voor de analytische opslag tijdens een doorlopende verwijdering door een partitiesleutelbewerking, kunnen de resultaten bevatten van de documenten die moeten worden verwijderd. Dit kan gebeuren totdat de verwijderbewerking volledig is voltooid.
- Continue back-up (herstel naar een bepaald tijdstip): een herstelbewerking die wordt geactiveerd tijdens een doorlopende verwijdering door een partitiesleutelbewerking kan de resultaten bevatten van de documenten die in de herstelde verzameling moeten worden verwijderd. Het is niet raadzaam om deze preview-functie te gebruiken als u een scenario hebt waarvoor continue back-up is vereist.
Beperkingen
- Verwijdering van hiërarchische partitiesleutels wordt niet ondersteund. Met deze functie kunnen items alleen worden verwijderd op basis van het laatste niveau van partitiesleutels. Denk bijvoorbeeld aan een scenario waarin een partitiesleutel bestaat uit drie hiërarchische niveaus: land, staat en plaats. In deze context kan de functionaliteit van partitiesleutels effectief worden gebruikt door de volledige partitiesleutel op te geven, die alle niveaus omvat, namelijk land/staat/plaats. Als u probeert te verwijderen met behulp van tussenliggende partitiesleutels, zoals land/staat of alleen land, treedt er een fout op.
Feedback geven of een probleem/bug melden
- E-mail cosmosPkDeleteFeedbk@microsoft.com met vragen of feedback.
SDK-vereisten
Zoek de nieuwste versie van de SDK die deze functie ondersteunt.
SDK | Ondersteunde versies | Package Manager-koppeling |
---|---|---|
.NET SDK v3 | >= 3.25.0-preview (moet preview-versie zijn) | https://www.nuget.org/packages/Microsoft.Azure.Cosmos/ |
Java SDK v4 | >= 4.19.0 (API is gemarkeerd als bèta) | https://mvnrepository.com/artifact/com.azure/azure-cosmos |
Python SDK v4 | >= 4..4.0b1 (moet bètaversie zijn) | https://pypi.org/project/azure-cosmos/4.4.0b1/ |
Ondersteuning voor andere SDK's is gepland voor de toekomst.
Volgende stappen
Zie de volgende artikelen voor meer informatie over SDK-bewerkingen in Azure Cosmos DB.