1

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

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

CPU 利用率 磁盘利用率

我阅读了这份文档,我明白这是 JavaScript 的错。

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

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

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

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

4

3 回答 3

2

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

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

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

于 2012-06-02T18:13:51.063 回答
0

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

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

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

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

于 2013-02-27T11:32:41.767 回答
0

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

于 2012-06-02T13:42:49.217 回答