我一直在尋找用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.javaHazelcast建立在CountAggregation真的效率低下?
Hazelcast中的聚合使用MapReduce算法實現。但對我來說,上面的來源似乎是非常低效的。對於算法的Mapper階段,他們使用SupplierConsumingMapper,它只是使用與提供的密鑰相同的密鑰發出映射。這意味着減少階段實際上並沒有減少任何東西,因爲所有發出的鍵都是不同的,並且最終在最終整理階段完成整個1的加載計數,而不是一些部分計數加在一起。
當然他們應該做的是使用總是發射相同密鑰的映射器?然後組合者和減速器實際上可以做一些組合和減少。在我看來,上面的源代碼錯誤地使用了MapReduce模型,儘管最終的結果是正確的。我誤解了一些東西嗎?
謝謝。對於所有使用SupplierConsumingMapper的聚合(我認爲幾乎所有內置聚合),我認爲這個問題都是一樣的,因爲它只是發出與IMap中的密鑰相同的密鑰。這意味着每個IMap條目都會有一個Combiner和Reducer。因此,Collator實現中的所有調用節點上都會發生所有排序規則,因此不會有任何組合和減少。 – user155631 2014-10-09 08:55:21