gpt4 book ai didi

c# - CosmosDb SDK v3 是否在批量插入时自动重试?

转载 作者:行者123 更新时间:2023-12-05 02:51:27 25 4
gpt4 key购买 nike

我是 CosmosDB 的新手,我正在尝试掌握 R/U 的设置限制。

情况

在 ASP.NET Core 2.1 应用程序中,我想一次插入 +/- 3000 个文档。循环这些项目并将它们一一添加需要几分钟的时间。所以散装可能是要走的路。我关注了一些资源,例如:

Bulk import data to Azure Cosmos DB SQL API account by using the .NET SDK on learn.microsoft.com

Introducing Bulk support in the .NET SDK

在我的代码中,我使用了博客中的示例代码。

List<Task> concurrentTasks = new List<Task>();
foreach (var entity in entities)
{
entity.Id = GenerateId(entity);

concurrentTasks.Add(Container.CreateItemAsync(entity, new PartitionKey(entity.RoleId)));
}

await Task.WhenAll(concurrentTasks);

将一个文档从我的本地开发机器插入到 Azure 中需要大约 6 个 R/U。

当我提供默认的每秒 400 个 R/U 时,我很快得到 429 Too Many Requests 异常。当我切换到自动缩放时,它会在大约 20 秒内完成,无一异常(exception)。

我的问题是:如果我想限制 R/U 并仍然使用这种 concurrentTasks 方法,SDK 是否会进行重试处理?或者我是否需要编写自己的 429 重试。

最佳答案

Bulk 在 V3 中确实在 429 上应用重试(您可以通过查看任何操作中的 Diagnostics 属性来验证这一点)。

重试次数由 CosmosClientOptions.MaxRetryAttemptsOnRateLimitedRequests 控制(默认为 9)。您收到错误的事实意味着 SDK 已经重试了 9 次。您可以增加此值并让 SDK 重试(这将花费更长的时间)。

事实上,启用 Autoscale 有所帮助,这意味着您要推送的数据负载对于配置的吞吐量(您提到的 400 RU)来说太高了。 Autoscale 将检测节流并增加配置的吞吐量以适应负载。

关于c# - CosmosDb SDK v3 是否在批量插入时自动重试?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63133232/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com