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

时间:2012-05-02 17:15:50

标签: javascript node.js mongodb mongoose database

好吧,所以我正在构建一个基于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');
      }
  });
}

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

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

其他信息:

mongoose@2.6.0
mongodb@2.0.4
node@0.6.9

3 个答案:

答案 0 :(得分:9)

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

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

使用这些技术,我现在可以在比以前处理1000的时间更短的时间内处理4000条记录。感谢所有评论的人,特别感谢Gates VP指出猫鼬不适合这种电话。

答案 1 :(得分:0)

  

同样的调用甚至没有应用mongodb shell的限制返回大约4ms。

默认情况下,shell会应用30左右的限制。 尝试从具有实际限制的shell进行操作?

此外,您可能希望从命令行管理程序中尝试.explain()

如果这些都不起作用,那么你可以采取@Kyle Banker的建议并查看the profiler

答案 2 :(得分:-1)

结帐ensureIndex 这将加快您的搜索速度