我刚刚遇到了一个有趣的问题,我的findAndModify查询,我有一个应用程序,每秒接收大约2000-3000个请求,每个请求都有一个“令牌”参数。
示例请求为:http://localhost:3000/manifest?token=my-token&adType=TableView
当我收到请求时,我会查找令牌,如果它存在,我会更新“timeUpdated”字段,否则我会将其插入我的“令牌”集合中。
这是我使用的查询(我有一个“宣传”mongo查询的商店库):
store.findAndModify(
'token',
queryEntity,
{
_id: 1
},
{
$setOnInsert: {
token: tokenName,
inventory: [],
status: 'LIVE',
time_created: now
},
$set:{
'time_updated': now,
'category': tokenCategory
},
$addToSet:{
'ad_types': adType
}
}
).then(function (token) {
// do something with token
})
.fail(function (err) { //handle errors });
一切都很好。然而,昨天我们收到了一个意外的请求峰值,我的findAndModify查询在mongo日志中显示为缓慢的操作,并开始瓶颈其他查询导致超时。 我的查询有问题吗?我能以任何方式优化它吗?