我有以下代码..。
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":["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”属性。
是否有人知道如何处理这个问题(或至少知道哪些记录被插入,哪些不是进程).
发布于 2018-01-03 09:12:38
带有cosmosdb的请求需要使用RUs。显然,您的插入请求超过了RU吞吐量,出现了错误代码16500。
超过为集合提供的请求单元的应用程序将被节流,直到速率降到低于保留级别为止。当节流阀发生时,后端将先发制人地用16500错误代码结束请求--太多的请求。默认情况下,MongoDB的API将自动重试10次,然后返回过多的请求错误代码。
您可以从正式文件找到更多的说明。
您可以按照以下方法来尝试解决这个问题:
您可以参考这个文章。
希望它能帮到你。
更新答案:
看起来您的文档不是唯一可识别的。因此,我认为由宇宙数据库自动生成的"_id“属性不能确定哪些文档已经插入,哪些文档没有插入。
我建议您增加吞吐量设置,清空数据库,然后批量导入数据。
考虑到成本,请参考此文档来设置适当的RU。
或者您可以通过Cosmos DB模拟器在本地测试大容量导入操作。
https://stackoverflow.com/questions/48064897
复制相似问题