Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/407.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/40.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Cosmos DB Mongo API如何管理;“请求率高”;条件_Javascript_Node.js_Mongodb_Azure_Azure Cosmosdb - Fatal编程技术网

Javascript Cosmos DB Mongo API如何管理;“请求率高”;条件

Javascript Cosmos DB Mongo API如何管理;“请求率高”;条件,javascript,node.js,mongodb,azure,azure-cosmosdb,Javascript,Node.js,Mongodb,Azure,Azure Cosmosdb,我有以下代码 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)

我有以下代码

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)
  }

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

{MongoError:Message:{“Errors”:[“请求速率很大”]}
活动ID:b3c83c38-0000-0000-0000-000000000000,
请求URI:/apps/DocDbApp/services/DocDbServer24/partitions/a4cb4964-38c8-11e6-8106-8cdcd42c33be/replicas/1p/,
RequestStats:,SDK:Microsoft.Azure.Documents.Common/1.19.102.5
位于G:\Node-8\NodeExample\Node\u modules\oracle电影票证演示\Node\u modules\mongodb core\lib\connection\pool.js:596:61
在AuthenticateTraggler(G:\Node-8\NodeExample\Node\u modules\oracle电影票证演示\Node\u modules\mongodb core\lib\connection\pool.js:514:16)
在Connection.messageHandler(G:\Node-8\NodeExample\Node\u modules\oracle电影票证演示\Node\u modules\mongodb core\lib\Connection\pool.js:550:5)
在emitMessageHandler(G:\Node-8\NodeExample\Node\u modules\oracle电影票证演示\Node\u modules\mongodb core\lib\connection\connection.js:309:10)
在TLSSocket。(G:\Node-8\NodeExample\Node\u modules\oracle电影票证演示\Node\u modules\mongodb core\lib\connection\connection.js:452:17)
在emitOne(events.js:116:13)
在TLSSocket.emit(events.js:211:7)
在addChunk(_stream_readable.js:263:12)
在readableAddChunk(_stream_readable.js:250:11)
在TLSSocket.Readable.push(_stream_Readable.js:208:10)
名称:“MongoError”,
消息:“消息:{“错误”:[“请求速率较大”]}\r\n活动ID:b3c83c38-0000-0000-000000000000,
请求URI:/apps/DocDbApp/services/DocDbServer24/partitions/a4cb4964-38c8-11e6-8106-8cdcd42c33be/replications/1p/,RequestStats:,SDK:Microsoft.Azure.Documents.Common/1.19.102.5',
_t:‘Okmongoreponse’,
好:0,,
代码:16500,
errmsg:'消息:{“错误”:[“请求速率较大”]}\r\n活动ID:b3c83c38-0000-0000-000000000000,
请求URI:/apps/DocDbApp/services/DocDbServer24/partitions/a4cb4964-38c8-11e6-8106-8cdcd42c33be/replicas/1p/,
RequestStats:,
SDK:Microsoft.Azure.Documents.Common/1.19.102.5',
“$err”:”消息:{“Errors”:[“请求速率过大”]}\r\n活动ID:b3c83c38-0000-0000-0000-000000000000,
请求URI:/apps/DocDbApp/services/DocDbServer24/partitions/a4cb4964-38c8-11e6-8106-8cdcd42c33be/replicas/1p/,RequestStats:,
SDK:Microsoft.Azure.Documents.Common/1.19.102.5'}
在我处理的740条记录中,似乎有一些(约165条)已加载。它们似乎都被赋予了“_id”属性


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

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

超出为某个应用程序配置的请求单位的应用程序 收集将被限制,直到速率降至保留速率以下 水平。当节流发生时,后端将抢先结束 带有16500错误代码的请求-请求太多。默认情况下,API 对于MongoDB,将在返回 请求太多错误代码

您可以从中找到更多说明

您可以按照以下方法尝试解决此问题:

  • 批量导入数据以降低吞吐量

  • 在应用程序中添加您自己的重试逻辑

  • 增加集合的保留吞吐量。当然,这会增加你的成本

  • 你可以参考这个

    希望对你有帮助


    更新答案:

    看起来您的文档不是唯一可识别的。因此,我认为Cosmos DB自动生成的“_id”属性无法确定哪些文档已插入,哪些文档未插入

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

    考虑到成本,请参考此设置适当的RU


    也可以通过

    Jay在本地测试批量导入操作。谢谢你的回复。我试图找出如何以优雅的方式处理异常,并对未插入的文档重试操作。根据例外情况中的信息,这几乎是不可能的。所有文档都被分配了“\u id”属性(由mongo客户端软件),当然,必须有比测试每个分配的id是否对应于COSMOS表中的一个条目更好的解决方案……我不确定所有文档都被分配了“\u id”属性的含义是什么。这些文档是否已插入到数据库中?在开始插入之前,mongo客户端似乎会为数组中的每个文档分配一个_id属性。因此,为了回答第二个问题,当抛出错误时,所有文档都被分配了一个_id属性,但只有部分文档被插入到数据库中。因此,我的问题是,我需要确定(理想情况下是例外情况)哪些文档已经插入,哪些文档没有插入。我无法使用_id属性的进位,因为在尝试插入操作之前,它似乎已被注入到所有文档中。。AFAIK _id是由Mongo节点API添加的,而不是Cosmos。无论我增加了多少RU,只要有足够大的文档集可以批量插入,我就会遇到这个错误,并且需要能够以优雅的方式从中恢复。对于多用户系统,清除数据库并重试不是一个选项。这是一个否定的答案。CosmosDB应该返回失败的操作,或者底层API应该像使用insertMany一样重试
    { 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' }