【问题标题】:Slow Mongoose Requests慢猫鼬请求
【发布时间】:2016-05-23 03:40:28
【问题描述】:

我的 Mongoose 查询一直很慢。我已将其缩小为 Mongoose 创建对象的方式或数据库服务器请求中的实际延迟。我在数据库中几乎没有任何数据(4 个集合中的每个集合中的对象均

通过在线搜索/查看文档我无法弄清楚的两个大问题:

  1. 如何获取 Mongoose 在 Mongo 上运行的原始查询?
  2. 一个调用对数据库服务器进行了多少次调用 - 例如,如果我有一个查询,其中包含几个填充调用、一个排序调用和回调函数中的一个嵌套填充调用,那么该调用对服务器进行了多少次调用.

这是我看到的一些延迟时间:

Login
localhost + localDB = 58ms
localhost + mongoHQ = 127ms
heroku + mongoHQ = 287ms

Get Data
localhost + localDB = 281ms
localhost + mongoHQ = 1657ms
heroku + mongoHQ = 2190ms

更新 1

我想出了如何记录查询并检查了其中的一堆。我认为它归结为一个带有一堆填充调用的查询 - 我注意到在生成查询的填充部分时,Mongoose 输出一个 Mongo 查询,例如:

users.find({ _id: { '$in': [ ObjectId("531ec0e17c0b16a82be4f506"), 
ObjectId("531ec0e17c0b16a82be4f506"), ObjectId("531ec0e17c0b16a82be4f506") ...

其中 id 重复多次(在本例中为数百次) - 我认为这是速度变慢的原因,并且测试代码我发现每个填充调用都会增加大约 .3s-.5s 的请求时间.填充调用也在一个数组字段上运行 - 这也将要查询的 id 数量保持在 100 秒内 - 低 1000 个(重复)。

有没有办法在进行填充调用时删除重复的条目?

【问题讨论】:

  • 你能用 mongo 控制台连接到其中一个实例,看看它们在直接连接时是否反应迟缓?我无法想象你发布的时间不能用猫鼬对象数量来解释,除非它有数万。
  • @WiredPrairie 看起来不错 - 当我运行登录用户测试时(见上文),连接到远程 db 127ms 时速度非常快
  • @WiredPrairie 我做了一些调查,你认为这可能是因为 populate 调用中有很多参数吗?
  • 它可能是......您可能只想推出自己的解决方案,至少在实验上(收集_ids,没有重复,看看会发生什么)。
  • 自己组装物品? kk我试试看

标签: node.js mongodb mongoose


【解决方案1】:

尝试更改您的查询以使用“精益”选项,看看时间是否会减少。这将绕过猫鼬实体的创建。

http://mongoosejs.com/docs/api.html#query_Query-lean

【讨论】:

  • 是的,今天早上试过了 - 实际上似乎根本没有什么不同(有时请求快一点,有时慢一点 - +-10 毫秒)
  • 当我遇到这个问题时,这对我有帮助。将时间缩短到一半。
猜你喜欢
  • 2017-05-31
  • 1970-01-01
  • 2017-03-01
  • 2015-06-19
  • 1970-01-01
  • 2018-09-30
  • 1970-01-01
  • 1970-01-01
  • 2018-01-10
相关资源
最近更新 更多