我必须使用大量数据的聚类算法来执行映射约简操作。我选择了MongoDB,因为它的可伸缩性、优秀的文档、BSon文档存储和许多其他伟大的特性。
但是,map-还原操作是太慢的。只使用我的四核CPU的一个核心。


我读过本文件,我明白这是JavaScript的错。
“单神进程中只有一个线程一次执行Javascript”
我怎样才能改进呢?提高IO速度?
否则,瓶颈仅仅是CPU和单线程算法,所以我不得不用另一种语言重写我的算法,在Mongo之外,利用多线程和多线程处理?
发布于 2012-06-02 18:13:51
否则,瓶颈只能是CPU和单线程算法。
问题是,没有并行的工作,而蒙戈使用蜘蛛侠作为它的js引擎。搬到V8有一个长期的计划,允许多线程执行js任务,但它不会发布下一个版本(2.2)。
对于那些能够切换到新的聚合框架而不是map/reduce的人来说,map/reduce的一些慢度将在2.2中得到改善。不幸的是,这听起来并没有帮助您,因为您使用的是自定义算法,而不仅仅是聚合计算。
发布于 2012-06-02 13:42:49
Map-还原就像在某个时候添加到MongoDB中的附录。如果您正在使用MongoDB寻找可计算的MR选项,那么请查看MongoDB Hadoop集成。MongoDB的MR实现过于有限和可怕,无法用于可伸缩的企业解决方案。
发布于 2013-02-27 11:32:41
MongoDB映射的并发部分--reduces-表明多个map-reduce将并行运行,尽管它们有时会彼此阻塞:
http://docs.mongodb.org/manual/applications/map-reduce/#map-reduce-concurrency
您的问题意味着您的处理算法是一个单一的map-还原操作,因此如果您能够将其拆分为多个map-还原操作,您可能会看到一些好处。
然而,如果没有IOwait,并且单个处理器被耗尽,那么这似乎是不可能的。
https://stackoverflow.com/questions/10861292
复制相似问题