11

好的,所以我正在构建一个基于 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 限制的相同调用在大约 4 毫秒内返回。这似乎是一个如此简单的查询,那么是什么让它这么慢呢?我猜我在某处的配置中遗漏了一些明显的东西,但我不知道。

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

其他信息:

mongoose@2.6.0
mongodb@2.0.4
node@0.6.9
4

3 回答 3

9

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

  • 我请求的对象很大,因此处理它们需要一些时间。对于大型对象,请修改查询以仅返回您现在需要的字段。
  • Mongoose 很有用,但是当您请求大量项目时它会真正变慢,如果您想要调用速度,最好直接与 node-mongodb-native 接口。(对于我的场景,这大约提高了 50% 以上的速度)

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

于 2012-05-04T00:14:39.627 回答
0

甚至没有应用 mongodb shell 限制的相同调用在大约 4 毫秒内返回。

默认情况下,shell 应用的限制为 30 左右。尝试从 shell 执行实际限制?

此外,您可能想.explain()从 Shell 尝试一个。

如果这些都不起作用,那么您可以接受@Kyle Banker 的建议并查看分析器

于 2012-05-03T00:27:41.683 回答
-1

checkout ensureIndex 这将加快您的搜索速度

于 2013-04-20T06:32:33.063 回答