sdk v3 中的 Azure Cosmos DB 中的请求超时

问题描述 投票:0回答:3

我正在将数据插入到 azure cosmos db 中。有时它会抛出错误(请求超时:408)。我已将请求超时增加到 10 分钟。

此外,我还从 api 迭代每个项目并调用

CreateItemAsync()
方法而不是批量执行器。

要插入的数据 = 430 K 项
使用的 Microsoft.Azure.Cosmos SDK = v3
容器吞吐量 = 400

谁能帮我解决这个问题。

azure .net-core azure-cosmosdb
3个回答
0
投票

只需增加吞吐量即可。但如果你让它增加的话,你会花费很多的钱。 400 RU/s 不会削减它,除非您将操作批量化到需要很长时间才能插入 400k 项目。

如果这是一次性交易,请将您的 RU/s 增加到 2000+,然后开始慢慢插入项目。我想说,根据您的文档大小,也许一次执行 50 个,然后等待 250 毫秒,然后再执行 50 个,直到完成。不过你必须玩这个。

完成后,将您的 RU/s 调回 400。

Cosmos DB 可能贵得离谱,所以要小心。


预计到达时间:

这来自一些文档

提高吞吐量:数据迁移的持续时间取决于您为单个集合或一组集合设置的吞吐量。确保增加较大数据迁移的吞吐量。完成迁移后,降低吞吐量以节省成本。有关提高 Azure 门户吞吐量的详细信息,请参阅 Azure Cosmos DB 中的性能级别和定价层。


0
投票

408 超时的文档页面列出了许多需要调查的可能原因。

除了使用 SDK 客户端应用程序解决根本原因或增加吞吐量之外,您还可以考虑利用 Azure 数据工厂来提取数据,如 在此示例中。这假设您的数据加载是一个初始化过程,并且您的数据可以作为 blob 文件提供。


0
投票

408 Request Timeout 错误并不是对该错误的准确描述。

“吞吐量超出配置”时抛出 408 错误。 换言之,这意味着如果您的数据库配置为每秒 400 RU,则您不能超过该级别,否则您将收到 408 错误。 如果您正在进行批量插入,则很容易发生这种情况。

您的选择:

  1. 以较慢的速度上传,以免超过预配置的吞吐量。
  2. 提高配置。
  3. 将配置类型更改为无服务器,无吞吐量限制,并且仅按 RU 总数收费。 如果您大部分时间负载都很轻,并且偶尔会出现像 BulkInsert 那样的突发情况,那么这是一个不错的选择。

您选择哪一种取决于您的预算和要求,并且您需要测试这些选项以找到适合您情况的具有成本效益的一种。

另请记住,存储空间是单独收费的,因此您需要明智地了解哪些数据会进入数据库。例如,大量文本可以以比 Cosmos Db 更便宜的价格卸载到 Blob 存储。

© www.soinside.com 2019 - 2024. All rights reserved.