Excluir itens por valor de chave de partição – API para NoSQL (versão prévia)

APLICA-SE A: NoSQL

Este artigo explica como usar os SDKs do Azure Cosmos DB para excluir todos os itens pelo valor da chave de partição lógica.

Importante

A exclusão de itens pelo valor de chave de partição está na visualização pública. O recurso é fornecido sem um Contrato de Nível de Serviço. Para obter mais informações, consulte Termos de Uso Complementares de Versões Prévias do Microsoft Azure.

Visão geral do recurso

O recurso de excluir por chave de partição é uma operação assíncrona em segundo plano que permite excluir todos os documentos com o mesmo valor de chave de partição lógica usando o SDK do Cosmos.

Como o número de documentos a serem excluídos pode ser grande, a operação é executada em segundo plano. Embora a operação de exclusão física seja executada em segundo plano, os efeitos estão disponíveis imediatamente, pois os documentos a serem excluídos não aparecerão nos resultados das consultas ou operações de leitura.

A operação de exclusão por chave de partição é limitada a consumir no máximo 10% do total de RUs disponíveis no contêiner a cada segundo. Isso ajuda a limitar os recursos usados por essa tarefa em segundo plano.

Introdução

Atualize sua conta do Azure Cosmos DB para habilitar o recurso "Excluir por chave de partição" usando a CLI do Azure.

  • Etapa 1: definir variáveis de shell

        $resourceGroupName = <azure_resource_group>
        $accountName = <azure_cosmos_db_account_name>
        $DeleteByPk = "DeleteAllItemsByPartitionKey"
    
  • Etapa 2: listar os recursos existentes da sua conta.

       $cosmosdb = az cosmosdb show \
        --resource-group $resourceGroupName \
        --name $accountName
       $capabilities = ($cosmosdb | ConvertFrom-Json).capabilities 
    
  • Etapa 3: adicionar a funcionalidade "Excluir itens por chave de partição" na lista de recursos, caso ainda não exista.

    Observação

    A lista de recursos deve sempre especificar todos os recursos que você deseja habilitar, de forma inclusiva. Isso inclui recursos que já estão habilitados para a conta que você deseja manter.

       $capabilities += $DeleteByPk
    
  • Etapa 4: atualizar a conta do Cosmos DB para habilitar o recurso "Excluir itens por chave de partição"

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

Código de exemplo

Use a versão 3.25.0-preview (ou uma versão de superior em versão prévia) do SDK do .NET do Azure Cosmos DB para excluir itens por chave de partição.

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

Perguntas frequentes (FAQ)

Os resultados da exclusão por operação de chave de partição são refletidos imediatamente?

Sim, uma vez iniciada a operação de exclusão por chave de partição, os documentos a serem excluídos não aparecerão nos resultados de consultas ou operações de leitura. Isso também significa que você pode gravar um novo documento com a mesma ID e chave de partição que um documento a ser excluído sem resultar em um conflito.

Confira as exceções em Problemas conhecidos.

O que acontece se eu iniciar uma operação de exclusão por chave de partição e então gravar imediatamente um novo documento com a mesma chave de partição?

Quando a operação de exclusão por chave de partição for emitida, somente os documentos existentes no contêiner, com o valor da chave de partição, serão excluídos. Quaisquer novos documentos que entrarem não estarão no escopo da exclusão.

Como a operação de exclusão por chave de partição é priorizada entre outras operações em relação ao contêiner?

Por padrão, a operação de exclusão por chave de partição pode consumir até uma fração reservada (de 0,1 ou 10%) das RU/s gerais no recurso. Todas as Unidades de Solicitação (RUs) neste bucket que não forem usadas estarão disponíveis para outras operações não em segundo plano, como leituras, gravações e consultas.

Por exemplo, suponha que você tenha provisionado 1000 RU/s em um contêiner. Há uma operação de exclusão por chave de partição em andamento que consome 100 RUs por segundo por 5 segundos. Durante cada um desses 5 segundos, há 900 RUs disponíveis para operações de banco de dados não em segundo plano. Depois que a operação de exclusão for concluída, todas as 1000 RU/s estarão disponíveis novamente.

Problemas conhecidos

Em alguns cenários, uma operação de exclusão por chave de partição pode não garantir imediatamente seus efeitos, e a visibilidade parcial pode ocorrer durante a operação.

  • Consultas agregadas que usam o índice – por exemplo, consultas COUNT que são executadas durante uma operação de exclusão por chave de partição em andamento – podem conter os resultados dos documentos a serem excluídos. Isso pode ocorrer até que a operação de exclusão seja totalmente concluída.
  • Consultas executadas no repositório analítico durante uma operação de exclusão por chave de partição em andamento podem conter os resultados dos documentos a serem excluídos. Isso pode ocorrer até que a operação de exclusão seja totalmente concluída.
  • Backup contínuo (restauração pontual) – uma restauração disparada durante uma operação de exclusão por chave de partição em andamento pode conter os resultados dos documentos a serem excluídos na coleção restaurada. Não é recomendável usar essa versão prévia do recurso se você tiver um cenário que exija backup contínuo.

Limitações

  • Não há suporte para a exclusão de chaves de partição hierárquica. Esse recurso permite a exclusão de itens apenas com base no último nível de chaves de partição. Por exemplo, considere um cenário em que uma chave de partição consiste em três níveis hierárquicos: país, estado e cidade. Nesse contexto, a funcionalidade de excluir por chaves de partição pode ser empregada efetivamente especificando a chave de partição completa, abrangendo todos os níveis, ou seja, país/estado/cidade. A tentativa de excluir usando chaves de partição intermediárias, como país/estado ou somente país, resultará em um erro.

Como fornecer comentários ou relatar um problema/bug

  • Mande um email para cosmosPkDeleteFeedbk@microsoft.com com perguntas ou comentários.

Requisitos do SDK

Localize a versão mais recente do SDK que dá suporte a essa funcionalidade.

. Versões com suporte Link do gerenciador de pacotes
SDK v3 do .NET >= 3.25.0-preview (deve ser versão prévia) https://www.nuget.org/packages/Microsoft.Azure.Cosmos/
SDK do Java v4 >= 4.19.0 (a API está marcada como beta) https://mvnrepository.com/artifact/com.azure/azure-cosmos
SDK v4 do Python >= 4..4.0b1 (deve ser a versão beta) https://pypi.org/project/azure-cosmos/4.4.0b1/

Planeja-se dar suporte a outros SDKs futuramente.

Próximas etapas

Confira os seguintes artigos para saber mais sobre as operações do SDK no Azure Cosmos DB.