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 Löschen von Elementen nach Partitionsschlüsselwert 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 löschen können, indem Sie das Cosmos SDK verwenden.

Da die Anzahl der zu löschenden Dokumente sehr groß sein kann, wird der Vorgang im Hintergrund ausgeführt. Obwohl der physische Löschvorgang im Hintergrund ausgeführt wird, sind die Auswirkungen sofort sichtbar, 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 dabei, die von dieser Hintergrundaufgabe verwendeten Ressourcen einzuschränken.

Erste Schritte

Aktualisieren Sie Ihr Azure Cosmos DB-Konto, um das Feature „Löschen nach Partitionsschlüssel“ mit Azure CLI zu aktivieren.

  • Schritt 1: Festlegen von Shellvariablen

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

       $cosmosdb = az cosmosdb show \
        --resource-group $resourceGroupName \
        --name $accountName
       $capabilities = ($cosmosdb | ConvertFrom-Json).capabilities 
    
  • Schritt 3: Hinzufügen der Funktion „Elemente nach Partitionsschlüssel löschen“ zur Liste der Funktionen, sofern noch nicht vorhanden.

    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
    
  • Schritt 4: Aktualisieren des Azure Cosmos DB-Kontos, um das Feature „Nach Partitionsschlüssel löschen“ mit Azure CLI zu aktivieren

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

Beispielcode

Verwenden Sie Version 3.25.0-preview (oder eine höhere Vorschauversion) 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 Vorgang „Löschen nach Partitionsschlüssel“ gestartet wird, werden die zu löschenden Dokumente nicht mehr 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 Vorgang „Nach Partitionsschlüssel löschen“ ausgeführt wird, werden nur die Dokumente gelöscht, die zu diesem Zeitpunkt mit dem Wert des Partitionsschlüssels im Container vorhanden sind. Alle neu hinzukommenden Dokumente werden von dem Löschvorgang nicht betroffen sein.

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. COUNT-Abfragen) und während eines laufenden Löschvorgangs nach Partitionsschlüssel ausgegeben werden, können die Ergebnisse der zu löschenden Dokumente enthalten. Dies kann vorkommen, bis der Löschvorgang vollständig abgeschlossen ist.
  • Abfragen an den Analysespeicher während eines laufenden Löschvorgangs nach Partitionsschlüssel können die Ergebnisse der zu löschenden Dokumente enthalten. Dies kann vorkommen, bis der Löschvorgang vollständig abgeschlossen ist.
  • Fortlaufende Sicherung (Zeitpunktwiederherstellung): Eine Wiederherstellung, die während eines laufenden Löschvorgangs nach Partitionsschlüssel ausgelöst wird, 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.

Begrenzungen

  • 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, Bundesland/Kanton und Stadt. In diesem Kontext kann die Funktion zum Löschen von Partitionsschlüsseln effektiv eingesetzt werden, indem der vollständige Partitionsschlüssel angegeben wird, der alle Ebenen umfasst, nämlich Land, Bundesland/Kanton und Stadt. Der Versuch, mit Teilpartitionsschlüsseln zu löschen, z. B. mit Land und Bundesland/Kanton oder nur mit Land, führt zu einem Fehler.

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-preview (muss Vorschauversion sein) https://www.nuget.org/packages/Microsoft.Azure.Cosmos/
Java SDK V4 >= 4.19.0 (API ist als Beta markiert) https://mvnrepository.com/artifact/com.azure/azure-cosmos
Python SDK v4 >= 4..4.0b1 (muss eine 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

In den folgenden Artikeln erfahren Sie mehr über die SDK-Vorgänge in Azure Cosmos DB.