gpt4 book ai didi

javascript - Cosmos DB Mongo API 如何管理 "Request Rate is Large"条件

转载 作者:可可西里 更新时间:2023-11-01 09:56:17 25 4
gpt4 key购买 nike

我有以下代码..

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

看来我正在处理的 740 条记录中的一些(大约 165 条)已被加载。它们似乎都被分配了“_id”属性。

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

最佳答案

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

Applications that exceed the provisioned request units for a collection will be throttled until the rate drops below the reserved level. When a throttle occurs, the backend will preemptively end the request with a 16500 error code - Too Many Requests. By default, API for MongoDB will automatically retry up to 10 times before returning a Too Many Requests error code.

您可以从 official document 找到更多说明.

您可以按照以下方式尝试解决该问题:

  1. 批量导入数据以减少吞吐量。

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

  3. 增加集合的预留吞吐量。当然,这会增加您的成本。

可以引用这个article .

希望对您有帮助。

<小时/>

更新答案:

您的文档似乎无法唯一识别。所以我认为Cosmos DB自动生成的“_id”属性无法确定哪些文档已插入,哪些文档未插入。

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

考虑到成本,请引用这个document用于设置适当的 RU。

或者您可以通过 Cosmos DB Emulator. 在本地测试批量导入操作

关于javascript - Cosmos DB Mongo API 如何管理 "Request Rate is Large"条件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48064897/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com