2014-03-27 110 views
2

我一直在非常缓慢的猫鼬查询。我将它缩小到Mongoose创建对象的方式或数据库服务器请求中的实际延迟。我几乎没有数据库中的任何数据(< 1000个对象在每个集合中),并手动运行查询(类似于产品中的查询)并对它们进行配置,并且它们都在2-4毫秒运行<。缓慢的猫鼬请求

两个大的问题,我一直无法通过网上搜索/看文档弄清楚:

  1. 如何获取猫鼬是在蒙戈运行原始查询?
  2. 调用数据库到数据库服务器的次数 - 例如,如果我在回调函数中有一对包含调用对象,排序调用和嵌套填充调用的查询,那么会对服务器执行多少次调用。

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

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

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

更新1

我想通了,如何记录查询和检查上一群人。我认为它灌进一个查询与一群上填入电话 - 我注意到,在生成查询的人口部分,猫鼬输出Mongo的查询,如:

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

,其中,ID重复多时间(在这种情况下是几百次) - 我认为这是放缓和测试代码的原因,我发现每个填充调用都会将约.3s-.5s添加到请求时间。填充调用也在一个数组字段上运行 - 这也保证了在100s内查询的id数 - 低1000(重复)。

有没有办法删除重复的条目时做一个填充调用?

+0

你能与蒙戈控制台连接到其中一个实例,看看它们是缓慢的直接连接时?我无法想象,你发布的时代不能用猫鼬的对象人口来解释,除非它有数万人。 – WiredPrairie

+0

@WiredPrairie它似乎很好 - 当我运行登录用户测试(见上文)时,连接到远程分区时速度非常快127ms –

+0

@WiredPrairie我做了一些调查,你认为这可能是因为有很多填充调用中的参数? –

回答

3

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

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

+0

烨试过,今天上午的表现 - 其实似乎没有有所作为(有时候请求有点快一些,有时会慢一点 - + -10ms) –

+0

这有助于我解决这个问题。削减一半的时间。 –