我们将MongoDB与 Parse-server 一起用作后端,我们的应用程序以5请求/秒的速率查询和保存数据。
在我们的3-stack解决方案(Nginx,Node.js,MongoDB)中,MongoDB获得了最高的CPU命中率,可能是由于查询和保存操作,我们正在使用 Jelastic 所以我们所做的是为我们的服务器提供可用的CPU资源,但每次MongoDB CPU使用率都会保持不变。
我认为这可以归结为这样一个事实:我们在保存之前和保存后对重复记录进行脏检查并删除最后一条重复记录时,检查是否存在具有相同字段值的文档(仅保留最早的一个)在Node.js级别。
现在的问题是:
以下是代码:
Parse.Cloud.beforeSave("ProcessedDocument", function(request, response) {
var d = request.object;
var documentId = d.get("documentId");
var query = new Parse.Query("ProcessedDocument");
query.equalTo("documentId", documentId);
query.first({
success: function(results) {
//console.log('Results ' + results);
if(results) {
if (!request.object.isNew()) {
response.success();
} else {
response.error({errorCode:400,errorMsg:"Document already exist"});
}
} else {
response.success();
}
},
error: function(error) {
response.success();
}
});
});
Parse.Cloud.afterSave("ProcessedDocument", function(request) {
var query = new Parse.Query("ProcessedDocument");
query.equalTo("documentId", request.object.get("documentId"));
query.ascending("createdAt");
query.find({
success:function(results) {
if (results && results.length > 1) {
for(var i = (results.length - 1); i > 0 ; i--) {
results[i].destroy();
}
}
else {
// No duplicates
}
},
error:function(error) {
}
});
});
以下是MongoDB Compass的性能快照: