我有以下代码..
{ 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' }
如果我使用大量文档运行它(不出意外)
func FindProspects(categories *string, cities *string, hasEmail *bool, hasContactperson *bool, limit int64, offset int64) []*gModels.Prospect {
var prospects []*gModels.Prospect
query := env.DB().Table("prospects").Select("prospects.id, prospects.name")
if categories != nil {
query = query.Joins("JOIN prospect_categories ON prospect_categories.prospect_id = prospects.id").Where("prospect_categories.category_name IN (?)", strings.Split(*categories, ","))
}
if cities != nil {
query = query.Where("prospects.city IN (?)", strings.Split(*cities, ","))
}
if hasEmail != nil && *hasEmail == true {
query = query.Where("prospects.id IN (SELECT emails.prospect_id FROM emails WHERE emails.prospect_id = prospects.id)")
}
if hasContactperson != nil && *hasContactperson == true {
query = query.Where("prospects.id IN (SELECT contact_people.prospect_id FROM contact_people WHERE contact_people.prospect_id = prospects.id)")
}
query = query.Order("prospects.name ASC")
query.Limit(int(limit)).Offset(int(offset)).Find(&prospects)
return prospects
}
看来我正在处理的740条记录中有一些(约165条)已被加载。所有这些似乎都被分配了&#39; _id&#39;属性。
有没有人知道如何处理这个问题(或者至少说明插入了哪些记录以及哪些记录不是进程)......
答案 0 :(得分:-1)
使用cosmosdb的请求需要使用RU。显然,您的插入请求超出了RU吞吐量并且出现了错误代码16500。
超出规定的请求单位的应用程序 收集将被限制,直到费率低于保留 水平。当油门发生时,后端将抢先结束 请求16500错误代码 - 请求太多。默认情况下,API 对于MongoDB,在返回之前会自动重试最多10次 请求错误代码太多。
您可以从official document找到更多说明。
您可以按照以下方式尝试解决问题:
分批导入数据以降低吞吐量。
在您的应用程序中添加您自己的重试逻辑。
增加集合的预留吞吐量。当然,这会增加你的成本。
您可以参考此article。
希望它对你有所帮助。
更新答案:
您的文档看起来不是唯一可识别的。所以我认为由Cosmos DB自动生成的“_id”属性无法确定插入了哪些文档以及哪些文档尚未插入。
我建议您增加吞吐量设置,清空数据库,然后批量导入数据。
考虑到费用,请参阅此document以设置相应的RU。
或者您可以通过Cosmos DB Emulator.
在本地测试批量导入操作