Azure CosmosDB:使用SDK进行批量删除
我想批量删除2-3万个项目。目前我正在使用下面的方法删除这些项目。但是需要1-2分钟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),
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有),并且您正在运行这些限制,那么新的连接可能会延迟,从而增加延迟
- 目标在其可以处理的操作数量上有限制(在本例中是以提供的吞吐量的形式)
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 }));
}