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