为什么我的mongodb打电话这么慢?

Rob*_*dle 9 javascript database mongoose mongodb node.js

好吧,所以我正在构建一个基于Node.js的应用程序,我正在使用mongoose来处理我与mongodb的连接.我有一个端点是这样的:

getTestStream : function(req, res, conditions, callback) {   
  Activity.find()
    .limit(1000)
    .run(function(err, activities) {
      if (err){
        util.sendError(req, res, "Query Error", err);
      } else if (activities) {     
        res.send(activities);
      } else {
        util.send('nope');
      }
  });
}
Run Code Online (Sandbox Code Playgroud)

由于某种原因,此调用需要700毫秒+才能完成.即使没有应用mongodb shell的限制,相同的调用也会在大约4ms内返回.这看起来像是一个简单的查询,那么是什么让它减慢了这么多?我猜我错过了配置中某些显而易见的东西,但我不知道.

感谢任何可以提供帮助的人.

其他信息:

mongoose@2.6.0
mongodb@2.0.4
node@0.6.9
Run Code Online (Sandbox Code Playgroud)

Rob*_*dle 9

经过一段时间的实验,我发现了一些缓慢的贡献,希望这可以帮助任何有类似问题的人:

  • 我要求的对象很大,因此处理它们需要一些时间.对于大对象,请将查询修改为仅返回您现在需要的字段.
  • Mongoose很有用,但是当你请求很多项时它真的会变慢,如果你想要一个调用的速度,它最好直接与node-mongodb-native接口.(对于我的场景,这大约增加了50%+速度)

使用这些技术,我现在可以在比处理1000之前更短的时间内处理4000条记录.感谢任何评论的人,特别感谢盖茨副总裁指出猫鼬不适合这种电话.

  • 它们不是很大,自从我解决这个问题已经有一段时间了,可能是4个字符串字段,每个字段大约50-100个字符.请记住,现在mongoose有一个[lean()](http://mongoosejs.com/docs/api.html#query_Query-lean)选项,它可以删除大多数任何getter/setter包装器膨胀,以及[stream() ](http://mongoosejs.com/docs/2.7.x/docs/querystream.html)函数,以便您可以在找到结果时获得结果. (2认同)