【问题标题】:How to speed up MongoDB's Map Reduce?如何加速 MongoDB Mapreduce?
【发布时间】:2012-06-02 09:43:02
【问题描述】:

我必须使用大量数据的聚类算法执行 map reduce 操作。 我选择 MongoDB 是因为它的可扩展性、出色的文档、BSon 文档存储和许多其他出色的功能。

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

我阅读了this document,我明白这是 JavaScript 的错误。

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

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

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

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

【问题讨论】:

    标签: mongodb mapreduce


    【解决方案1】:

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

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

    map/reduce 的一些缓慢性将在 2.2 中得到改善,以便能够切换到新的 aggregation framework 而不是 map/reduce 的人。不幸的是,这听起来对您没有帮助,因为您使用的是自定义算法而不仅仅是聚合计算。

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        【解决方案3】:

        MongoDB map-reduce 文档的并发部分建议多个 map-reduce 将并行运行,尽管它们有时会相互阻塞:

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

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

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2021-04-07
          • 2016-05-27
          • 1970-01-01
          • 2015-09-27
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多