Java 是Hazelcast';它的内置功能真的很低效吗?

Java 是Hazelcast';它的内置功能真的很低效吗?,java,mapreduce,hazelcast,Java,Mapreduce,Hazelcast,我一直在研究用Hazelcast分布式映射实现替换当前执行命令的Oracle数据库。要做到这一点,我需要用Hazelcast等价物替换SQL查询。Hazelcast提供了一些内置聚合,例如计数。我一直很高兴地使用它,但当我开始编写自己的聚合时,我看了一下CountAggregation的源代码。可以在这里找到: Hazelcast中的聚合使用MapReduce算法实现。但对我来说,上述来源似乎真的效率低下。对于算法的Mapper阶段,他们使用SupplierConsumingMapper,它只是

我一直在研究用Hazelcast分布式映射实现替换当前执行命令的Oracle数据库。要做到这一点,我需要用Hazelcast等价物替换SQL查询。Hazelcast提供了一些内置聚合,例如计数。我一直很高兴地使用它,但当我开始编写自己的聚合时,我看了一下CountAggregation的源代码。可以在这里找到:

Hazelcast中的聚合使用MapReduce算法实现。但对我来说,上述来源似乎真的效率低下。对于算法的Mapper阶段,他们使用SupplierConsumingMapper,它只是使用与提供的密钥相同的密钥发出映射。这意味着减少阶段实际上并没有减少任何内容,因为所有发出的键都是不同的,在最后的排序阶段,您将得到一个1的全部负载,而不是要相加的部分计数


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

嘿,你完全正确。在那个地方实现有点简单:)您可以在github上提交一个问题,这样我们就不会忘记修复这个问题了。谢谢克里斯

谢谢。我认为所有使用SupplierConsumingMapper(我认为几乎所有内置聚合)的聚合都会遇到同样的问题,因为它只会发出与IMap中的键相同的键。这意味着每个IMap条目都将有一个合并器和减速机。因此,在Collator实现中,所有的排序都发生在调用节点上,因此不会合并任何内容,也不会减少任何内容。