Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/azure/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Azure CosmosDB:使用SDK进行批量删除_Azure_Azure Cosmosdb - Fatal编程技术网

Azure CosmosDB:使用SDK进行批量删除

Azure CosmosDB:使用SDK进行批量删除,azure,azure-cosmosdb,Azure,Azure Cosmosdb,我想批量删除2-3万个项目。目前我正在使用下面的方法删除这些项目。但是需要1-2分钟 private async Task DeleteAllExistingSubscriptions(string userUUId) { var subscriptions = await _repository .GetItemsAsync(x => x.DistributionUserIds.Contains(userUUId),

我想批量删除2-3万个项目。目前我正在使用下面的方法删除这些项目。但是需要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);
            }
        }
是否有任何方法可以在较短的时间内使用CosmosDB SDK 3.0批量删除这些项目?

请检查,以了解您尝试发送的数据量是否因为您提供的吞吐量不足而受到限制

Bulk只是通过优化数据从您的计算机到帐户的流动方式来改进发送数据的客户端方面,但是如果您的容器没有设置为处理该操作量,那么操作将受到限制,完成所需的时间将更长

与任何数据流场景一样,瓶颈是:

  • 源环境无法以您想要的速度处理数据,这将显示为机器CPU上的瓶颈/峰值(处理更多数据将需要更多CPU)
  • 网络的带宽有限制,在某些情况下,网络可以传输的数据量甚至可以打开的连接量都有限制。如果您正在运行代码的计算机有这样的限制(例如,Azure VM有,Azure App Service有),并且您正在运行这些限制,那么新的连接可能会延迟,从而增加延迟
  • 目标在其可以处理的操作数量上有限制(在本例中是以提供的吞吐量的形式)

我完全按照你的方式来做,但我从来没有为这么多的项目做过,或者经常为了优化我的日常工作而做过。希望有一个宇宙飞船的主人出现。如果有更好的方法可以做到这一点,那将很有趣。下面是Metrices统计数据:平均吞吐量/s*=1.16KRU/s,Av请求/s*=783.52,数据大小8.45MB,索引大小635.9kb。在将吞吐量值更改为10000后,现在删除和插入12k项需要20-25秒。但是,正如您所知,10000吞吐量的成本非常高。从技术角度看,没有什么好建议的,你有大量的数据要插入,而这些数据代表了一定的资源消耗。您可以调配所需的资源,操作将毫不延迟地进行,也可以调配不足,操作将花费更长的时间。对于未充分配置的资源,您无法加快处理速度。
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 }));
        }