Freigeben über


Löschen von Elementen nach Partitionsschlüsselwert – API für NoSQL (Vorschau)

GILT FÜR: NoSQL

In diesem Artikel wird erläutert, wie Sie die SDKs in Azure Cosmos DB verwenden, um alle Elemente nach dem Schlüsselwert der logischen Partition zu löschen.

Wichtig

Das Feature "Elemente nach Partitionsschlüsselwert löschen " befindet sich in der öffentlichen Vorschau. Dieses Feature wird ohne Vereinbarung zum Servicelevel bereitgestellt. Weitere Informationen finden Sie unter Zusätzliche Nutzungsbestimmungen für Microsoft Azure-Vorschauen.

Funktionsübersicht

Das Feature "Löschen nach Partitionsschlüssel" ist ein asynchroner Hintergrundvorgang, mit dem Sie alle Dokumente mit demselben logischen Partitionsschlüsselwert mithilfe des Cosmos SDK löschen können.

Da die Anzahl der zu löschenden Dokumente möglicherweise groß ist, wird der Vorgang im Hintergrund ausgeführt. Obwohl der physische Löschvorgang im Hintergrund ausgeführt wird, sind die Effekte sofort verfügbar, da die zu löschenden Dokumente nicht in den Ergebnissen von Abfragen oder Lesevorgängen angezeigt werden.

Der Vorgang „Löschen nach Partitionsschlüssel“ ist nach bester Leistung darauf ausgelegt, pro Sekunde höchstens 10 % der insgesamt verfügbaren RU/s (Anforderungseinheiten pro Sekunde) des Containers zu verbrauchen. Dies hilft, die von dieser Hintergrundaufgabe verwendeten Ressourcen einzuschränken.

Loslegen

Aktualisieren Sie Ihr Azure Cosmos DB-Konto, um die Funktion Löschen nach Partitionsschlüssel mithilfe der Azure CLI zu aktivieren.

  1. Legen Sie Shellvariablen fest.

        $resourceGroupName = <azure_resource_group>
        $accountName = <azure_cosmos_db_account_name>
        $DeleteByPk = "DeleteAllItemsByPartitionKey"
    
  2. Auflisten vorhandener Funktionen Ihres Kontos

       $cosmosdb = az cosmosdb show \
        --resource-group $resourceGroupName \
        --name $accountName
       $capabilities = ($cosmosdb | ConvertFrom-Json).capabilities 
    
  3. Fügen Sie in der Liste der Fähigkeiten die Fähigkeit Elemente nach Partitionsschlüssel zu löschen hinzu, wenn sie noch nicht vorhanden ist.

    Hinweis

    In der Liste der Funktionen müssen immer alle Funktionen angegeben sein, die Sie aktivieren möchten. Dies schließt Funktionen ein, die bereits für das Konto aktiviert sind, das Sie behalten möchten.

       $capabilities = $DeleteByPk
    
  4. Aktualisieren Sie das Cosmos DB-Konto, um das Löschen von Elementen mithilfe der Partitionsschlüsselfunktion zu aktivieren.

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

Beispielcode

Verwenden Sie version 3.25.0 Preview oder höher des Azure Cosmos DB .NET SDK, um Elemente nach Partitionsschlüssel zu löschen.

// 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");
}

Häufig gestellte Fragen (FAQ)

Werden die Ergebnisse des Vorgangs „Löschen nach Partitionsschlüssel“ sofort angezeigt?

Ja, sobald der Löschvorgang durch den Partitionsschlüsselvorgang gestartet wird, werden die zu löschenden Dokumente nicht in den Ergebnissen von Abfragen oder Lesevorgängen angezeigt. Das bedeutet auch, dass Sie ein neues Dokument mit der gleichen ID und dem gleichen Partitionsschlüssel wie ein zu löschendes Dokument erstellen können, ohne dass es zu einem Konflikt kommt.

Ausnahmen finden Sie unter Bekannte Probleme.

Was passiert, wenn ich einen Vorgang zum Löschen nach Partitionsschlüssel ausführe und dann sofort ein neues Dokument mit demselben Partitionsschlüssel erstelle?

Wenn der Löschvorgang durch Partitionsschlüssel ausgegeben wird, werden nur die Dokumente gelöscht, die im Container mit dem Partitionsschlüsselwert vorhanden sind. Alle neuen Dokumente, die eingehen, fallen nicht unter den Löschvorgang.

Wie wird der Vorgang „Löschen nach Partitionsschlüssel“ gegenüber anderen Vorgängen für den Container priorisiert?

Standardmäßig kann der Vorgang „Löschen nach Partitionsschlüsselwert“ bis zu einem reservierten Anteil – 0,1 oder 10 % – der gesamten RU/s (Anforderungseinheiten pro Sekunde) der Ressource verbrauchen. Alle ungenutzten Anforderungseinheiten (RUs) in diesem Bucket stehen für andere Vorgänge zur Verfügung, die nicht im Hintergrund ausgeführt werden, z. B. Lese- und Schreibvorgänge sowie Abfragen.

Nehmen wir z. B. an, Sie haben 1000 RU/s für einen Container bereitgestellt. Es gibt einen fortlaufenden Vorgang für das Löschen nach Partitionsschlüssel, der 5 Sekunden lang jede Sekunde jeweils 100 Anforderungseinheiten (RUs) verbraucht. Während jeder dieser 5 Sekunden stehen jeweils 900 RUs für nicht im Hintergrund ablaufende Datenbankvorgänge zur Verfügung. Sobald der Löschvorgang abgeschlossen ist, sind jetzt wieder alle 1000 RU/s verfügbar.

Bekannte Probleme

In einigen Szenarien können sich die Auswirkungen eines Löschvorgangs nach Partitionsschlüssel nicht sofort manifestieren, sodass während des Vorgangs diese teilweise sichtbar sind.

  • Aggregierte Abfragen, die den Index verwenden, z. B. ANZAHL-Abfragen, die während eines fortlaufenden Löschens durch den Partitionsschlüsselvorgang ausgegeben werden, können die Ergebnisse der zu löschenden Dokumente enthalten. Dies kann auftreten, bis der Löschvorgang vollständig abgeschlossen ist.
  • Abfragen, die für den Analysespeicher für Synapse Link (veraltet) während eines laufenden Löschvorgangs durch den Partitionsschlüsselvorgang ausgegeben wurden, können die Ergebnisse der zu löschenden Dokumente enthalten. Dies kann auftreten, bis der Löschvorgang vollständig abgeschlossen ist.
  • Fortlaufende Sicherung (Zeitpunktwiederherstellung): wird während eines laufenden Löschvorgangs nach Partitionsschlüssel ausgelöst und kann die Ergebnisse der zu löschenden Dokumente in der wiederhergestellten Sammlung enthalten. Es wird nicht empfohlen, diese Previewfunktion zu verwenden, wenn Sie über ein Szenario verfügen, das eine fortlaufende Sicherung erfordert.

Einschränkungen

Das Löschen hierarchischer Partitionsschlüssel wird nicht unterstützt. Dieses Feature ermöglicht das Löschen von Elementen basierend ausschließlich auf der letzten Partitionsschlüsselebene. Betrachten Sie beispielsweise ein Szenario, in dem ein Partitionsschlüssel aus drei hierarchischen Ebenen besteht: Land/Region, Bundesland und Stadt. In diesem Zusammenhang kann die Löschfunktion der Partitionsschlüssel effektiv eingesetzt werden, indem der vollständige Partitionsschlüssel angegeben wird, der alle Ebenen umfasst, nämlich Land/Region, Bundesland und Stadt. Beim Versuch, mit Zwischenpartitionsschlüsseln wie Land/Region oder Bundesland oder allein Land/Region zu löschen, tritt ein Fehler auf.

Feedback oder Meldung bei Problemen/Fehlern

Senden Sie eine E-Mail an cosmosPkDeleteFeedbk@microsoft.com mit Fragen oder Feedback.

SDK-Anforderungen

Suchen Sie die neueste Version des SDK, die dieses Feature unterstützt.

SDK Unterstützte Versionen Link zum Paket-Manager
.NET SDK v3 3.25.0 oder höher (muss Vorschauversion sein) https://www.nuget.org/packages/Microsoft.Azure.Cosmos/
Java SDK V4 4.19.0 oder höher (API ist als Beta gekennzeichnet) https://mvnrepository.com/artifact/com.azure/azure-cosmos
Python SDK v4 4.4.0b1 oder höher (muss Betaversion sein) https://pypi.org/project/azure-cosmos/4.4.0b1/

Die Unterstützung anderer SDKs ist für die Zukunft geplant.

Nächste Schritte