CosmosDb SDK v3在批量插入时会自动重试吗



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

情况

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

使用learn.microsoft.com 上的.NET SDK将数据批量导入Azure Cosmos DB SQL API帐户

介绍.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 Request异常。当我切换到"自动缩放"时,它在大约20秒内完成,无一例外。

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

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

重试次数由CosmosClientOptions.MaxRetryAttemptsOnRateLimitedRequests(默认值为9(控制。事实上,你得到了错误,这意味着SDK已经重试了9次。您可以增加此值并保持SDK重试(这将需要更长的时间(。

事实上,启用自动缩放有帮助,这意味着您想要推入的数据负载对于所提供的吞吐量(如您所提到的400 RU(来说太高。自动缩放将检测到限制并增加提供的吞吐量以适应负载。

相关内容

  • 没有找到相关文章

最新更新