Mongodb的mapreduce性能分析

来源:互联网 发布:股票什么时候买入知乎 编辑:程序博客网 时间:2024/06/06 04:31

这几天又进行了一下mongodb的性能分析,目前我用的是5台的sharding,2.0版本的mongodb,数据量是30G,7千万条记录。索引也有10-15G。测试的是一个mapreduce。先根据index,找到数据,然后再进行类似于group by的distinct和count操作。

我建立了两张表,一个是根据id进行sharding的,一个是根据查询条件进行sharding的,id的sharding中也建立了查询条件的索引。每个测试进行三次,为的是让所有的操作都能在内存中进行,一般来说第一次mapreduce会比较慢,第二三次mapreduce就比较快,时间也是一致的。

在以id为sharding的collection中执行mapredcue花了120秒,而以查询条件为sharding的collection中执行mapredcue中花了260秒。减低mapreduce的复杂度,只做group by的count,时间还是类似的,前置花了0.7秒,后者花了2秒。暂且不管mongodb的mapreduce的性能问题,我们可以得出结论,在分布式计算中,分到多台机器上计算比分到一台机器上计算性能有比较明显的提升。

继续进行试验,将mapreduce改成python脚本,mongodb本书只是做查询操作,把数据取出来后都在用python来进行group by的distinct和count操作。测试的是mongodb的mapreduce性能。

测试结果如下,在id为sharding的情况下mapreduce化了90秒,python脚本花了48秒。在查询条件为sharding的情况下mapredcue花了300秒,python脚本花了50秒。可以得出结论mongodb的mapreduce性能比较差,在本地做计算还不如在client做计算,这是不符合常识的。

mongodb本身的性能还是不错的,但是他的mapreduce性能不足。目前有人在将Hadoop的mapreduce移植到mongodb上,这个倒是一条好方法。