首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Cosmos DB Mongo如何管理“请求率大”条件

Cosmos DB Mongo如何管理“请求率大”条件
EN

Stack Overflow用户
提问于 2018-01-02 16:57:24
回答 1查看 6.9K关注 0票数 11

我有以下代码..。

代码语言:javascript
复制
async function bulkInsert(db, collectionName, documents) {
  try {
    const cosmosResults = await db.collection(collectionName).insertMany(documents);
    console.log(cosmosResults);
    return cosmosResults
  } catch (e) {
    console.log(e)
  }

}

如果我使用大量的文档运行它(并不意外)

代码语言:javascript
复制
{ MongoError: Message: {"Errors":["Request rate is large"]}
  ActivityId: b3c83c38-0000-0000-0000-000000000000, 
  Request URI: /apps/DocDbApp/services/DocDbServer24/partitions/a4cb4964-38c8-11e6-8106-8cdcd42c33be/replicas/1p/, 
  RequestStats: , SDK: Microsoft.Azure.Documents.Common/1.19.102.5
    at G:\Node-8\NodeExample\node_modules\oracle-movie-ticket-demo\node_modules\mongodb-core\lib\connection\pool.js:596:61
at authenticateStragglers (G:\Node-8\NodeExample\node_modules\oracle-movie-ticket-demo\node_modules\mongodb-core\lib\connection\pool.js:514:16)
at Connection.messageHandler (G:\Node-8\NodeExample\node_modules\oracle-movie-ticket-demo\node_modules\mongodb-core\lib\connection\pool.js:550:5)
at emitMessageHandler (G:\Node-8\NodeExample\node_modules\oracle-movie-ticket-demo\node_modules\mongodb-core\lib\connection\connection.js:309:10)
at TLSSocket.<anonymous> (G:\Node-8\NodeExample\node_modules\oracle-movie-ticket-demo\node_modules\mongodb-core\lib\connection\connection.js:452:17)
at emitOne (events.js:116:13)
at TLSSocket.emit (events.js:211:7)
at addChunk (_stream_readable.js:263:12)
at readableAddChunk (_stream_readable.js:250:11)
at TLSSocket.Readable.push (_stream_readable.js:208:10)
name: 'MongoError',
message: 'Message: {"Errors":["Request rate is large"]}\r\nActivityId: b3c83c38-0000-0000-0000-000000000000, 
Request URI: /apps/DocDbApp/services/DocDbServer24/partitions/a4cb4964-38c8-11e6-8106-8cdcd42c33be/replicas/1p/, RequestStats: , SDK: Microsoft.Azure.Documents.Common/1.19.102.5',
_t: 'OKMongoResponse',
ok: 0,
code: 16500,
errmsg: 'Message: {"Errors":["Request rate is large"]}\r\nActivityId:      b3c83c38-0000-0000-0000-000000000000, 
Request URI: /apps/DocDbApp/services/DocDbServer24/partitions/a4cb4964-38c8-11e6-8106-8cdcd42c33be/replicas/1p/, 
RequestStats: , 
SDK: Microsoft.Azure.Documents.Common/1.19.102.5',
 '$err': 'Message: {"Errors":["Request rate is large"]}\r\nActivityId: b3c83c38-0000-0000-0000-000000000000, 
 Request   URI: /apps/DocDbApp/services/DocDbServer24/partitions/a4cb4964-38c8-11e6-8106-8cdcd42c33be/replicas/1p/, RequestStats: , 
SDK: Microsoft.Azure.Documents.Common/1.19.102.5' }

似乎有些(大约)。165)在我处理的740条记录中,有740条已经载入。它们似乎都被分配了“_id”属性。

是否有人知道如何处理这个问题(或至少知道哪些记录被插入,哪些不是进程).

EN

回答 1

Stack Overflow用户

发布于 2018-01-03 09:12:38

带有cosmosdb的请求需要使用RUs。显然,您的插入请求超过了RU吞吐量,出现了错误代码16500。

超过为集合提供的请求单元的应用程序将被节流,直到速率降到低于保留级别为止。当节流阀发生时,后端将先发制人地用16500错误代码结束请求--太多的请求。默认情况下,MongoDB的API将自动重试10次,然后返回过多的请求错误代码。

您可以从正式文件找到更多的说明。

您可以按照以下方法来尝试解决这个问题:

  1. 以批方式导入数据以降低吞吐量。
  2. 在应用程序中添加您自己的重试逻辑。
  3. 增加集合的保留吞吐量。当然,这会增加你的成本。

您可以参考这个文章

希望它能帮到你。

更新答案:

看起来您的文档不是唯一可识别的。因此,我认为由宇宙数据库自动生成的"_id“属性不能确定哪些文档已经插入,哪些文档没有插入。

我建议您增加吞吐量设置,清空数据库,然后批量导入数据。

考虑到成本,请参考此文档来设置适当的RU。

或者您可以通过Cosmos DB模拟器在本地测试大容量导入操作。

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48064897

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档