Azure CosmosDB: массовое удаление с помощью SDK - PullRequest
2 голосов
/ 06 августа 2020

Я хочу удалить 20–30 тыс. Элементов сразу. В настоящее время я использую метод ниже, чтобы удалить эти элементы. Но это занимает 1-2 минуты.

private async Task DeleteAllExistingSubscriptions(string userUUId)
        {
            var subscriptions = await _repository
                .GetItemsAsync(x => x.DistributionUserIds.Contains(userUUId), o => o.PayerNumber);

            if (subscriptions.Any())
            {
                List<Task> bulkOperations = new List<Task>();
                foreach (var subscription in subscriptions)
                {
                    bulkOperations.Add(_repository
                        .DeleteItemAsync(subscription.Id.ToString(), subscription.PayerNumber).CaptureOperationResponse(subscription));
                }
                await Task.WhenAll(bulkOperations);
            }
        }

Клиент Cosmos: Как мы видим, я уже установил AllowBulkExecution = true

private static void RegisterCosmosClient(IServiceCollection serviceCollection, IConfiguration configuration)
        {
            string cosmosDbEndpoint = configuration["CosmoDbEndpoint"];

            Ensure.ConditionIsMet(cosmosDbEndpoint.IsNotNullOrEmpty(),
                () => new InvalidOperationException("Unable to locate configured CosmosDB endpoint"));

            var cosmosDbAuthKey = configuration["CosmoDbAuthkey"];

            Ensure.ConditionIsMet(cosmosDbAuthKey.IsNotNullOrEmpty(),
                () => new InvalidOperationException("Unable to locate configured CosmosDB auth key"));

            serviceCollection.AddSingleton(s => new CosmosClient(cosmosDbEndpoint, cosmosDbAuthKey,
                new CosmosClientOptions { AllowBulkExecution = true }));
        }

Есть ли способ удалить этот элемент в пакет с CosmosDB SDK 3.0 за меньшее время?

1 Ответ

1 голос
/ 06 августа 2020

Пожалуйста, проверьте метрики , чтобы понять, не ограничивается ли объем данных, которые вы пытаетесь отправить, из-за того, что вашей подготовленной пропускной способности недостаточно.

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

Как и в случае любого сценария потока данных, узкими местами являются:

  • Исходная среда не может обрабатывать данные так быстро, как вы хотите, что будет проявляться как узкое место / всплеск на ЦП машины (обработка для большего количества данных потребуется больше ЦП).
  • Пропускная способность сети имеет ограничения, в некоторых случаях сеть имеет ограничения на объем данных, которые она может передавать, или даже на количество открытых соединений. Если компьютер, на котором вы запускаете код, имеет такие ограничения (например, Azure виртуальные машины имеют SNAT , Azure Служба приложений имеет ограничения TCP ), и вы работаете с ними, новые подключения могут задерживаться и, таким образом, увеличивать задержку.
  • У места назначения есть ограничения на количество операций, которые он может обрабатывать (в данном случае в форме предоставленной пропускной способности).
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...