Hazelcast内置的CountAggregation真的效率低下吗?

时间:2014-10-08 11:58:48

标签: java mapreduce hazelcast

我一直在寻找用Hazelcast分布式地图实现替换当前正在执行的命令的Oracle数据库。为此,我需要用Hazelcast等效替换我们的SQL查询。 Hazelcast提供了一些内置聚合,例如计数。我很乐意使用它,但是当我编写自己的聚合时,我看了一下CountAggregation的源代码。可在此处找到:http://grepcode.com/file/repo1.maven.org/maven2/com.hazelcast/hazelcast/3.3-RC2/com/hazelcast/mapreduce/aggregation/impl/CountAggregation.java

Hazelcast中的聚合是使用MapReduce算法实现的。但对我来说,上面的来源似乎效率很低。对于算法的Mapper阶段,他们使用SupplierConsumingMapper,它只使用与提供的密钥相同的密钥发出映射。这意味着减少阶段实际上并没有减少任何东西,因为所有发出的密钥都是不同的,并且你最终会在最后的整理阶段计算出1到1的整数,而不是将一些部分计数加在一起。

他们应该做的是使用始终发出相同密钥的映射器?然后组合器和减速器实际上可以进行一些组合和减少。在我看来,上面的源代码错误地使用了MapReduce模型,尽管你最终得到的结果是正确的。我误解了什么吗?

1 个答案:

答案 0 :(得分:0)

嘿,你是绝对正确的。在那个地方实现有点简单:)你能不能在github上提交一个问题所以我们不会忘记修复那个问题。谢谢Chris