Azure CosmosDB:使用SDK批量删除

时间:2020-08-06 17:48:49

标签: azure azure-cosmosdb

我要批量删除20-30k项。目前,我正在使用以下方法删除这些项目。但是需要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 Client:我们已经看到,我已经设置了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 个答案:

答案 0 :(得分:1)

请检查metrics,以了解由于配置的吞吐量不足,您尝试发送的数据量是否没有受到限制。

批量处理通过优化数据从计算机到帐户的流向,从而改善了客户端发送数据的方面,但是,如果未配置容器来处理该数量的操作,那么操作将受到限制,时间也受到限制完成所需的时间会更长。

与任何数据流方案一样,瓶颈是:

  • 源环境无法按照您想要的速度处理数据,这将显示为计算机CPU上的瓶颈/尖峰(处理更多数据将需要更多CPU)。
  • 网络的带宽有限制,在某些情况下,网络对可以传输的数据量甚至可以打开的连接数都有限制。如果您正在运行代码的计算机具有此类限制(例如,Azure VM具有SNAT,Azure App Service具有TCP limits)并且您正在运行它们,则新连接可能会延迟,从而增加延迟。
  • 目的地在其可以处理的操作数量方面有限制(在这种情况下,以预定吞吐量的形式)。