我必须使用大量数据的聚类算法执行映射归约操作。 我选择 MongoDB 是因为它的可扩展性、出色的文档、BSon 文档存储和许多其他出色的功能。
但是,map-reduce 操作太慢。我的四核 CPU 只使用了一个核心。
我读到this document我知道这是 JavaScript 的错误。
"Only one thread in the mongod process executes Javascript at a time"
我该如何改进?提高 IO 速度?
- SSD 存储可能有用吗?
- 将整个 MongoDB 数据加载到 RAM 上?
否则瓶颈只是CPU和单线程算法,所以我必须用Mongo之外的另一种语言重写我的算法,以利用多线程和多处理?
最佳答案
Otherwise bottleneck is only the CPU and the mono-thread algorithm
问题在于,当 Mongo 使用 Spidermonkey 作为其 js 引擎时,工作没有并行化。有一个长期计划move to V8允许多线程执行js任务,但不会在下一个版本(2.2)中出现。
map/reduce 的一些缓慢问题将在 2.2 中得到改善,以便那些能够切换到新版本的人 aggregation framework而不是映射/减少。不幸的是,这听起来对您没有帮助,因为您使用的是自定义算法而不仅仅是聚合计算。
关于mongodb - 如何加速MongoDB的MapReduce?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10861292/