gpt4 book ai didi

c# - CosmosDB - DocumentDB - 批量插入,无需饱和集合 RU

转载 作者:太空狗 更新时间:2023-10-29 20:41:03 25 4
gpt4 key购买 nike

我正在研究将 Azure CosmosDB 用于需要高读取吞吐量和扩展能力的应用程序。 99% 的事件都是读取,但有时我们需要插入某处,从几个文档到可能有几百万个文档。

我创建了一个集合来测试并配置了 2500 RU/秒。然而,我在插入 120 个小(500 字节)文档时遇到了问题(我收到“请求率很大”错误)。

我怎样才能以任何有用的方式使用文档数据库,如果我想插入一些文档,它会使用我所有的 RU 并阻止任何人阅读它?

是的,我可以增加配置的 RU,但如果我只需要 2500 个用于读取,我不想只为偶尔的插入支付 10000 个 RU。

读取需要尽可能快,最好是在 "single-digit-millisecond" 中微软宣传的范围。插入不需要尽可能快,但越快越好。

我尝试使用我见过建议的存储过程,但这也无法可靠地插入所有内容,我尝试使用答案 here 中建议的使用多个线程创建自己的批量插入方法但这会产生非常慢的结果,并且至少在某些文档中经常会出现错误,并且平均 RU 率似乎远低于我所配置的值。

我觉得我一定错过了一些东西,我是否必须大量超额配置 RU 才能进行写入?是否有某种内置功能来限制 RU 用于插入?如何在合理的时间内插入数十万个文档,而不会使集合变得不可用?

最佳答案

在某些情况下可以执行数百万个文档的批量插入。我们刚刚在我的公司进行了一次练习,将 1 亿条记录从 Azure SQL DB 中的各个表移动到 CosmosDb。

  • 了解 CosmosDb 分区非常重要。选择一个好的分区键将数据分散到各个分区对于获得您想要的吞吐量至关重要。 每个分区的最大 RU/s 吞吐量为 10k。如果您尝试将所有数据推送到单个分区中,则配置多少 RU/s 并不重要,因为任何超过 10k 的数据都会被浪费(假设您的容器没有发生任何其他情况)。
  • 此外,每个逻辑分区的最大大小为 20GB。一旦大小达到 20GB,如果您尝试添加更多记录,就会出现错误。明智地选择分区键的另一个原因。
  • 使用批量插入。 Here's a great video提供了一个演练。使用最新的 NuGet 包,它的使用非常简单。我发现该视频比 learn.microsoft.com 上的视频提供了更好的解释。

编辑CosmosDb 现在有 Autoscale 。启用自动缩放后,您的集合将保持较低的配置 RU/s,并在负载不足时自动扩展到最大阈值。对于您指定的用例,这将为您节省大量资金。自从该功能正式发布以来,我们就一直在使用它。

如果您的大部分操作都是读取,请查看 Integrated Cache 。截至目前,它处于公共(public)预览状态。我没有使用过这个,但如果您的阅读量很大,它可以为您节省金钱。

关于c# - CosmosDB - DocumentDB - 批量插入,无需饱和集合 RU,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45632778/

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