当前位置: 首页 > 知识库问答 >
问题:

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

公良琛
2023-03-14

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

位置

在ASP.NETCore 2.1应用程序中,我想一次插入 /-3000个文档。循环这些项目并一个接一个地添加它们需要几分钟的时间。所以批量可能是最好的方法。我遵循了一些资源,例如:

使用docs.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个太多请求异常。当我切换到自动缩放时,它在大约20秒内完成,没有异常。

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

共有1个答案

田冥夜
2023-03-14

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

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

启用自动缩放很有帮助,这意味着您想要推入的数据负载对于所调配的吞吐量(您提到的400 RU)来说太高了。Autoscale将检测节流并增加所提供的吞吐量以适应负载。

 类似资料:
  • 我正在写一个数据挖掘程序,可以批量插入用户数据。 当前SQL只是一个普通的批量插入: 如果发生冲突,如何进行更新?我试过: 但它抛出

  • 问题内容: 在MS SQL上,我可以使用以下sql命令进行批量插入: 现在我想在MySQL上做同样的事情,但是我似乎无法弄清楚它是如何工作的以及使用什么查询。 问题答案: 在MySQL中,等效项为 加载数据文件 http://dev.mysql.com/doc/refman/5.1/en/load- data.html

  • 问题内容: 这是我在阅读有关jpa批量插入的几个主题之后创建的简单示例,我有2个持久对象User和Site。一个用户可以拥有多个站点,因此我们在这里有一对多的关系。假设我要创建用户并将多个站点创建/链接到用户帐户。考虑到我愿意为Site对象使用批量插入,代码如下所示。 但是,当我运行此代码时(我将hibernate方式用作jpa实现提供程序),我看到以下sql输出: 所以,我的意思是“真实的”批量

  • 我在Azure Blob存储中有CSV文件,我想将文件内容插入我的MS SQL表。我在代码中使用的CSV文件和表具有相同的列数。 我使用了此处指定的批量插入命令:从Azure blob存储中的文件导入数据。 如果使用本地文件路径,则大容量插入按预期工作,但如果从blob读取,则会出现以下错误: 无法大容量加载,因为无法打开文件“itemdata\u csv\u test.csv”。操作系统错误代码

  • 我正在向CouchBase批量插入数据,几分钟后出现了这个异常: 我做错什么了吗?

  • 问题内容: 我正在使用Python中的MySQLdb模块与数据库进行交互。我遇到的情况是有一个非常大的列表(成千上万个元素),需要将它们作为行插入表中。 我现在的解决方案是生成一个大的语句作为字符串并执行它。 有没有更聪明的方法? 问题答案: 有一种更聪明的方法。 批量插入的问题在于,默认情况下启用了自动提交功能,从而导致每个语句在下一次插入可以启动之前被保存到稳定存储中。 如手册页所述: 默认情