【问题标题】:RequestRateTooLargeException when trying to insert 200 documents in DocumentDB尝试在 DocumentDB 中插入 200 个文档时出现 RequestRateTooLargeException
【发布时间】:2015-03-10 16:44:38
【问题描述】:

调用.createDocument() 在集合中插入少于200 个文档时,我收到以下错误。它通常开始发生在第 150 个电话左右。我正在使用 Node.js SDK。发生这种情况时,没有其他操作在数据库上运行。

{ 代码:429,正文:'{“代码”:“429”,“消息”:“异常: Microsoft.Azure.Documents.RequestRateTooLargeException,消息: {\"Errors\":[\"请求速率很大\"]},请求URI: rntbd://10.100.136.85:14900/apps/1240113d-9858-49b9-90cb-1219f9e1df77/services/itsupportrequests-ServerService-1/partitions/d7253667-671b-4f4e-ac84-a13b7d3dbf5a\80511117d3dbf5a/80511176:8467 5726e6b5-7955-4b39-b306-4903b9f69b36"}' }

【问题讨论】:

    标签: node.js azure azure-cosmosdb


    【解决方案1】:

    当您的访问速率超过允许的配额时,就会发生这种情况。 DocumentDB 每个集合每秒最多有 2,000 个请求单位。插入收费(基于文档的大小和索引词的数量)。如果您的插入需要 20 个请求单位,那么您每秒可以进行 100 次插入。如果读取需要 2 个请求单位,则每秒可以执行 1,000 次。

    如果超过此值,您将收到此错误。

    解决此问题的方法是跨多个集合横向扩展您的应用程序,每个集合每秒最多获得 2,000 个请求单位。

    当您收到此异常时,您还将收到一个 HTTP 标头,该标头将告诉您在重试操作之前等待多长时间。遵守此等待期并再次尝试操作。

    【讨论】:

    • 如何找到请求单位的成本?我的文档非常小,只包含两个键值对。
    • 另外,如何获取标题?当我设置断点时,对象只包含“body”和“code”值
    • 在插入操作的回调中,回调的第三个参数将包含标题。标头之一将是请求费用。
    • 太棒了!我现在有了 retry-after 标头。在我捕获的错误中,我是否只需检查错误 429 并使用 setTimeout 在重试标头时间再次调用 .createDocument?
    猜你喜欢
    • 1970-01-01
    • 2015-01-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-05-15
    相关资源
    最近更新 更多