如何加速MongoDB的Map Reduce?

时间:2012-06-02 09:43:03

标签: mongodb mapreduce

我将使用大量数据的聚类算法执行map reduce操作。 我选择MongoDB的可扩展性,优秀的文档,BSon文档存储以及许多其他强大的功能。

但是,map-reduce操作 太慢 。我只使用了四核CPU的一个核心。

CPU utilization Disk Utilization

我读了this document,我知道这是JavaScript的错误。

  

“mongod进程中只有一个线程一次执行Javascript”

我该如何改进?提高IO速度?

  • SSD存储可能有用吗?
  • 将整个MongoDB的数据加载到RAM上?

否则瓶颈 CPU和单线程算法,所以我必须在Mongo之外用另一种语言重写我的算法,以利用多线程和多处理?

3 个答案:

答案 0 :(得分:2)

  

否则瓶颈只是CPU和单线程算法

问题是当Mongo使用Spidermonkey作为其js引擎时,没有工作的并行化。 move to V8有一个长期计划允许js任务的多线程执行,但它不会生成下一个版本(2.2)。

对于能够切换到新aggregation framework而不是map / reduce的人来说,使用map / reduce的一些缓慢性将会得到改善。不幸的是,由于您使用自定义算法而不仅仅是聚合计算,因此听起来不会对您有所帮助。

答案 1 :(得分:0)

Map-reduce就像是在某些时候添加到MongoDB的附录。如果您正在寻找MongoDB的可扩展MR选项,那么请查看MongoDB Hadoop集成。 MongoDB的MR实现过于有限和可怕,以便将其用于可扩展的企业解决方案。

答案 2 :(得分:0)

MongoDB map-reduce文档的并发部分表明多个map-reduce将并行运行,但它们有时会相互阻塞:

http://docs.mongodb.org/manual/applications/map-reduce/#map-reduce-concurrency

您的问题意味着您的处理算法是单个map-reduce操作,因此如果您能够将其拆分为多个map-reduce操作,您可能会看到一些好处。

但是,如果没有IOwait并且单个处理器被最大化,则似乎不太可能。

相关问题