【发布时间】:2020-09-11 13:42:01
【问题描述】:
总的来说,我对系统设计非常陌生,所以让我尽我所能解释我的问题!
我有两个 EC2 t2.micro 实例正在运行:一个是我的 MongoDB,它存储了 10,000,000 条主记录,另一个是我的 express 服务器。
我的MongoDB文档结构如下:
{
_id: 1,
images: ["url_1.jpg", "url_2.jpg", "url_3.jpg"],
}
这就是我的 mongo 连接的样子:
const { MongoClient } = require('mongodb');
const { username, password, ip } = require('./config.js');
const client = new MongoClient(`mongodb://${username}:${password}@${ip}`,
{ useUnifiedTopology: true, poolSize: 10 });
client.connect();
const Images = client.db('imagecarousel').collection('images');
module.exports = Images;
我正在使用 loader.io 对我的服务器 GET API 端点运行 1000PRS 压力测试。第一个测试使用.findOne() 查询,第二个测试使用.find().limit(1) 查询,如下所示:
const query = { _id: +req.params.id };
Images.findOne(query).then((data) => res.status(200).send(data))
.catch((err) => {
console.log(err);
res.status(500).send(errorMessage);
});
//////////////////////////////////////////
const query = { _id: +req.params.id };
Images.find(query).limit(1).toArray().then((data) => res.status(200).send(data[0]))
.catch((err) => {
console.log(err);
res.status(500).send(errorMessage);
});
当我在 New Relic 上查看结果时,我对所看到的内容感到有些困惑:New Relic Results
经过一番研究,我认为这与 .findOne() 返回文档和 .find() 返回光标有关?
所以我的问题是:我如何确定瓶颈是 node.js 还是 MongoDB,并且我使用的查询是否为我确定了这一点(在这种特定情况下)?
【问题讨论】:
-
您在 newrelic 结果中看到了什么以及您所指的感知瓶颈是什么?
-
这能回答你的问题吗? Retrieve Mongoose Query Queue Time Metrics
-
我注意到在 .find() 上,Mongo 的 Web 事务时间低于 1 毫秒,但使用 .findOne() 时为 1300 毫秒
-
检查这个包 - github.com/clinicjs/node-clinic。对于 mongoDB 分析 - github.com/nearform/node-clinic-bubbleprof-demo