我一直以为Mongo在mapreduce功能方面表现出色,但我现在读到这是一个缓慢的实现。因此,如果我不得不选择基准测试的替代方案,它应该是什么?
我的软件将会是这样的,用户通常会拥有数百万条记录,并且经常通过不可预测的10个或100个数千个子集进行排序和处理。大多数使用数百万条记录的数据分析都可以在汇总表等中完成。我原本以为Hypertable是一个可行的选择,但在研究中我在他们的文档中看到他们提到Mongo将是一个更高效的选择,而Hypertable则有其他好处。但对于我的申请,速度是我的首要任务。
答案 0 :(得分:1)
首先,决定什么是“足够快”是很重要的。毫无疑问,解决方案比MongoDB的map / reduce更快,但在大多数情况下,您可能会看到更高的开发成本。
那就是说MongoDB的map / reduce在编写时运行在单个线程上,这意味着它不会利用它可用的所有cpu。此外,MongoDB几乎没有本机聚合功能。这将更改为2.1版以后版本,但可以改善效果(请参阅https://jira.mongodb.org/browse/SERVER-447和http://www.slideshare.net/cwestin63/mongodb-aggregation-mongosf-may-2011)。
现在,MongoDB擅长的是轻松扩展,特别是在读取方面。这很重要,因为大数据集上数字运算的最佳解决方案肯定是像Augusto建议的地图/减少云。让这样的m / r进行数字运算,而MongoDB以高速提供所需的数据。通过添加更多mongo分片可以轻松解决数据库查询吞吐量过低的问题。通过添加更多m / r框解决了数字运算/聚合性能太慢的问题。基本上,性能会成为您为问题保留的实例数量的函数,从而降低成本。