在MongoDb上重复执行相同的javascript的性能?

时间:2011-06-28 20:40:25

标签: mongodb

我正在考虑在MongoDb查询中使用一些JavaScript。我有几个选择:

  • db.system.js.save db中的函数然后执行它
  • 带有db.myCollection.find子句的
  • $where并且每次都发送JS
  • MongoEngine中的
  • exec_js(我想用其中一个)

我计划在常规使用的查询中使用JavaScript,该查询作为对站点或API的请求的一部分执行(即不是批处理管理作业),因此以合理的速度执行查询非常重要。

我正在寻找一个30行的功能。

Javascript每次解释都是新鲜的吗?表现会好吗?构建查询是否是明智的基础?

2 个答案:

答案 0 :(得分:1)

  

每次Javascript被解释为新鲜吗?

差不多。 MongoDB每个运行的MongoDB实例只有一个“javascript实例”。如果您尝试同时运行两个不同的Map / Reduces,您会注意到这一点。

  

表现会好吗?

显然,这里有“OK”的不同定义。 $where子句不能使用索引。您可以将该子句与另一个索引查询组合在一起。在任何一种情况下,每个对象都需要从BSON推送到Javascript运行时,然后在运行时内进行操作。

这个过程绝对不是你所说的“高性能”。当然,通过这种方法,Map / Reduce也不是非常高效,人们在生产系统上使用它。

  

构建查询是否合理?

这里的真正障碍不是代码中的行数,而是此代码将解释的可能文档的数量。即使它是“服务器端”的javascript,它仍然是服务器必须做的一大堆工作。 (在一个线程中,在解释的环境中)

如果你可以测试它并正确定位它,它可能会很好。只是不要指望奇迹。

答案 1 :(得分:0)

你的意思是什么?编写一个JS脚本并通过cron定期调用它。这应该是什么问题?