我正在将数据插入到 azure cosmos db 中。有时它会抛出错误(请求超时:408)。我已将请求超时增加到 10 分钟。
此外,我还从 api 迭代每个项目并调用
CreateItemAsync()
方法而不是批量执行器。
要插入的数据 = 430 K 项
使用的 Microsoft.Azure.Cosmos SDK = v3
容器吞吐量 = 400
谁能帮我解决这个问题。
只需增加吞吐量即可。但如果你让它增加的话,你会花费很多的钱。 400 RU/s 不会削减它,除非您将操作批量化到需要很长时间才能插入 400k 项目。
如果这是一次性交易,请将您的 RU/s 增加到 2000+,然后开始慢慢插入项目。我想说,根据您的文档大小,也许一次执行 50 个,然后等待 250 毫秒,然后再执行 50 个,直到完成。不过你必须玩这个。
完成后,将您的 RU/s 调回 400。
Cosmos DB 可能贵得离谱,所以要小心。
预计到达时间:
这来自一些文档:
提高吞吐量:数据迁移的持续时间取决于您为单个集合或一组集合设置的吞吐量。确保增加较大数据迁移的吞吐量。完成迁移后,降低吞吐量以节省成本。有关提高 Azure 门户吞吐量的详细信息,请参阅 Azure Cosmos DB 中的性能级别和定价层。
408 超时的文档页面列出了许多需要调查的可能原因。
除了使用 SDK 客户端应用程序解决根本原因或增加吞吐量之外,您还可以考虑利用 Azure 数据工厂来提取数据,如 在此示例中。这假设您的数据加载是一个初始化过程,并且您的数据可以作为 blob 文件提供。
408 Request Timeout 错误并不是对该错误的准确描述。
“吞吐量超出配置”时抛出 408 错误。 换言之,这意味着如果您的数据库配置为每秒 400 RU,则您不能超过该级别,否则您将收到 408 错误。 如果您正在进行批量插入,则很容易发生这种情况。
您的选择:
您选择哪一种取决于您的预算和要求,并且您需要测试这些选项以找到适合您情况的具有成本效益的一种。
另请记住,存储空间是单独收费的,因此您需要明智地了解哪些数据会进入数据库。例如,大量文本可以以比 Cosmos Db 更便宜的价格卸载到 Blob 存储。