猫鼬查询非常慢(即使是瘦身)

时间:2020-05-27 08:41:36

标签: javascript mongodb express mongoose mongodb-atlas

我正在使用MongoDB,并且可以处理Express中Mongoose的任何修改。 我认为查询应该快得多。如果我错了,请指正我,但是尽管这些数据很大,但不是那么大。尤其是因为我在查询过程中没有进行过滤。

所以我使用的模型是

const DataSchema = mongoose.Schema({
  title: String,
  text: String,
  text_transform: Array,
  provider: String,
  url: {
    type: String,
    unique: true,
  },
  word_count: Array,
  HOW: Array,
  date: Date,
  click_count: Number,
}); 

一些一般性事实:
文本的大小可能有所不同。可以为150个字符,但也可以为7000个字符,甚至更多(但通常少于7000个)。
text_transform 是一个数组,其元素是 text 的单词。
provider 是一个短字符串,我目前最多只能输入12个字符。
word_count 是一个以键值对(数组)为元素的数组,如下所示:

[
   ["key", value], ["other_key", other_value], ...
]

值是数字,键是字符串。
HOW 是一个最多包含5个元素(字符串)的数组。约6-10个字符。

我有自己的API,对某​​个端点的请求通常会触发查询。
我的问题与尝试检索我的所有数据有关。

所以我向该端点发送了一个请求:

router.get("/", async (req, res) => {
  try {
    const data = await DataSchema.find({}).lean();
    res.json(data);
  } catch (err) {
    res.status(404);
  }
});

如您所见,我已经使用 lean(),因为我可以使用简单的json。
但是,当我在客户端执行查询时:
DevTools(F12) - Network
xhr request details
此时,我的数据库中大约有270个文档。

我不认为这可能是网络问题,因为当我将查询限制在前10个元素时,它的速度要快得多,但仍然需要一秒钟左右的时间,在我看来这很慢。

有什么方法可以使其更快?

此外,您可能会感兴趣:为了进行开发,我使用的是MongoDB Atlas的免费层(因此没有探查器和/或性能分析),并且我尚未投入生产,因此我没有要测试的生产环境。另外,该地区是比利时(europe-west1),这是离我最近的地区,但这并没有太大的不同。

此外,我尝试删除 text_transform ,因为我现在不需要它。没什么区别。

编辑:

我忘了说了,我实现了一个返回硬编码json的终结点。不到1毫秒即可完成。所以这就是为什么我认为这里的查询很慢。

.explain()结果

[
  {
    queryPlanner: {
      plannerVersion: 1,
      namespace: 'test.articles',
      indexFilterSet: false,
      parsedQuery: {},
      winningPlan: [Object],
      rejectedPlans: []
    },
    executionStats: {
      executionSuccess: true,
      nReturned: 301,
      executionTimeMillis: 0,
      totalKeysExamined: 0,
      totalDocsExamined: 301,
      executionStages: [Object],
      allPlansExecution: []
    },
    serverInfo: {
      host: 'some.database-shard.mongodb.net',
      port: 27017,
      version: '4.2.6',
      gitVersion: '20364840b8f1af16917e4c23c1b5f5efd8b352f8'
    },
    ok: 1,
    '$clusterTime': { clusterTime: '6831457389108002820', signature: [Object] },
    operationTime: '6831457389108002820'
  }
]

感谢您抽出宝贵的时间阅读,并感谢您的提前帮助。

1 个答案:

答案 0 :(得分:0)

对于在那里遇到同样问题的任何人。我对它的MongoDB地图集感到怀疑,而且确实如此。

我认为,查询速度很慢的原因是MongoDB Atlas快速获得了请求,查询速度很快,但是返回结果却非常缓慢。由于使用共享服务器的免费M0沙盒程序包,这可能是一个负担。我永远不会确切知道。另一方面,这很令人欣慰,因为在生产环境中,这种事情不必发生。

TL; DR

出于开发目的,我切换到了另一个免费的mongodb提供程序,所有内容都立即加载。