我要批量删除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批量删除这些项目?
答案 0 :(得分:1)
请检查metrics,以了解由于配置的吞吐量不足,您尝试发送的数据量是否没有受到限制。
批量处理通过优化数据从计算机到帐户的流向,从而改善了客户端发送数据的方面,但是,如果未配置容器来处理该数量的操作,那么操作将受到限制,时间也受到限制完成所需的时间会更长。
与任何数据流方案一样,瓶颈是: