Удаление элементов по значению ключа секции — API для NoSQL (предварительная версия)

ОБЛАСТЬ ПРИМЕНЕНИЯ: NoSQL

В этой статье объясняется, как использовать пакеты SDK Azure Cosmos DB для удаления всех элементов по значению ключа логического раздела.

Важно!

Удаление элементов по значению ключа секции находится в общедоступной предварительной версии. Эта функция предоставляется без соглашения об уровне обслуживания. Дополнительные сведения см. в статье Дополнительные условия использования Предварительных версий Microsoft Azure.

Обзор возможностей

Функция удаления по ключу секции — это асинхронная фоновая операция, которая позволяет удалять все документы с одинаковым значением ключа логического раздела с помощью пакета SDK Cosmos.

Так как количество подлежащих удалению документов может быть большим, операция выполняется в фоновом режиме. Хотя операция физического удаления выполняется в фоновом режиме, эффекты доступны немедленно, так как документы, которые будут удалены, не будут отображаться в результатах запросов или операций чтения.

Операция удаления по ключу секции ограничена потреблением не более 10 % от общего объема доступных единиц запросов в секунду в контейнере. Это помогает ограничить ресурсы, используемые этой фоновой задачей.

Начало работы

Обновите учетную запись Azure Cosmos DB, чтобы включить функцию "Удалить по ключу раздела" с помощью Azure CLI.

  • Шаг 1. Задание переменных оболочки

        $resourceGroupName = <azure_resource_group>
        $accountName = <azure_cosmos_db_account_name>
        $DeleteByPk = "DeleteAllItemsByPartitionKey"
    
  • Шаг 2. Вывод списка существующих возможностей учетной записи.

       $cosmosdb = az cosmosdb show \
        --resource-group $resourceGroupName \
        --name $accountName
       $capabilities = ($cosmosdb | ConvertFrom-Json).capabilities 
    
  • Шаг 3. Добавьте функцию "Удалить элементы по ключу секции" в списке возможностей, если она еще не существует.

    Примечание.

    Список возможностей всегда должен указывать все возможности, которые вы хотите включить, включительно. Сюда входят возможности, которые уже включены для учетной записи, которую вы хотите сохранить.

       $capabilities += $DeleteByPk
    
  • Шаг 4. Обновление учетной записи Cosmos DB, чтобы включить функцию "Удалить элементы по ключу раздела"

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

Пример кода

Используйте предварительную версию 3.25.0 (или более позднюю предварительную версию) пакета SDK .NET для Azure Cosmos DB для удаления элементов по ключу секции.

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

Вопросы и ответы

Отображаются ли результаты операции удаления по ключу секции немедленно?

Да, после запуска операции удаления по ключу секции документы, которые будут удалены, не будут отображаться в результатах запросов или операций чтения. Это также означает, что вы можете написать новый документ с тем же идентификатором и ключом секции, что и подлежащий удалению документ без конфликта.

См. сведения об известных проблемах, связанных с исключениями.

Что произойдет, если выполнить удаление с помощью операции ключа секции, а затем сразу же записать новый документ с тем же ключом секции?

При выполнении операции удаления по ключу секции будут удалены только документы, существующие в контейнере, а затем со значением ключа секции. Любые новые документы, поступающие, не будут находиться в область для удаления.

Насколько приоритетна операция удаления по ключу секции среди других операций с контейнером?

По умолчанию операция удаления по значению ключа секции может использовать до зарезервированных 10 % (0,1 при выражении дробью) от общего числа ЕЗ/с для ресурса. Все единицы запросов (ЕЗ) в этом контейнере, которые не используются, будут доступны для других неиспользуемых операций, таких как операции чтения, записи и запросы.

Например, предположим, что вы подготовили 1000 ЕЗ/с в контейнере. Существует непрерывное удаление по операции ключа секции, которая потребляет 100 ЕЗ каждый секунду в течение 5 секунд. В течение каждого из этих 5 секунд доступно 900 единиц запросов для операций с базами данных без переднего плана. После завершения операции удаления все 1000 ЕЗ/с теперь снова доступны.

Известные проблемы

В некоторых сценариях операция удаления по ключу секции может не сразу гарантировать его влияние, а во время операции может произойти частичное видимость.

  • Агрегатные запросы, использующие индекс (например, запросы COUNT), выдаваемые во время текущего удаления операцией ключа секции, могут содержать результаты подлежащих удалению документов. Это может произойти до полного завершения операции удаления.
  • Запросы, выданные к аналитическому хранилищу во время текущего удаления операцией ключа секции, могут содержать результаты подлежащих удалению документов. Это может произойти до полного завершения операции удаления.
  • Непрерывное резервное копирование (восстановление до точки во времени) — восстановление, которое активируется во время текущего удаления операцией ключа секции, может содержать результаты подлежащих удалению документов в восстановленной коллекции. Не рекомендуется использовать эту предварительную версию, если у вас есть сценарий, требующий непрерывного резервного копирования.

Ограничения

  • Удаление ключей иерархических разделов не поддерживается. Эта функция позволяет удалять элементы исключительно на основе последнего уровня ключей секций. Например, рассмотрим сценарий, в котором ключ секции состоит из трех иерархических уровней: страны, штата и города. В этом контексте функцию удаления ключей секций можно эффективно использовать, указав полный ключ секции, охватывающий все уровни, а именно страну или штат или город. Попытка удалить с помощью промежуточных ключей секций, таких как страна или страна или только страна, приведет к ошибке.

Как отправить отзыв или сообщить о проблеме или ошибке

  • Отправить по адресу cosmosPkDeleteFeedbk@microsoft.com письмо с вопросами или отзывами.

Требования к пакету SDK

Найдите последнюю версию пакета SDK, поддерживающую эту функцию.

SDK Поддерживаемые версии Ссылка для диспетчера пакетов
Пакет SDK версии 3 для .NET >= 3.25.0-preview (должна быть предварительной версией) https://www.nuget.org/packages/Microsoft.Azure.Cosmos/
Пакет SDK для Java версии 4 >= 4.19.0 (API помечен как бета-версия) https://mvnrepository.com/artifact/com.azure/azure-cosmos
Пакет SDK для Python версии 4 >= 4.4.0b1 (должна быть бета-версия) https://pypi.org/project/azure-cosmos/4.4.0b1/

Поддержка других пакетов SDK планируется в будущем.

Следующие шаги

Чтобы узнать о дополнительных операциях пакета SDK в Azure Cosmos DB, ознакомьтесь со следующими статьями.