2014-10-08 2 views
1

저는 현재 실행중인 명령의 Oracle 데이터베이스를 Hazelcast 분산 맵 구현으로 대체하려고합니다. 이렇게하려면 SQL 질의를 Hazelcast와 동일하게 대체해야합니다. 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 알고리즘을 사용하여 구현됩니다. 그러나 나에게 위의 소스는 실제로 비효율적 인 것으로 보인다. 알고리즘의 매퍼 단계에서 SupplierConsumingMapper를 사용합니다. SupplierConsumingMapper는 제공된 키와 동일한 키를 사용하여 매핑을 간단하게 내 보냅니다. 이것이 의미하는 바는 감소 된 스테이지는 실제로 방출 된 키가 모두 다르기 때문에 실제로 감소시키지 않는다는 것입니다. 최종 키 정렬 단계에서 카운트 업하기 위해 1의 전체로드로 끝납니다. 합산하여 계산합니다.

확실히 그들이 수행해야하는 작업은 항상 동일한 키를 방출하는 매퍼를 사용하는 것입니다. 그러면 결합 자와 감속기는 실제로 결합과 축소를 할 수 있습니다. 위에 나와있는 소스 코드가 MapReduce 모델을 잘못 사용하고있는 것으로 보입니다. 결과는 정확합니다. 내가 뭔가 잘못 이해 한거야?

답변

0

안녕하세요? 맞습니다. 구현은 그 장소에서 조금은 간단합니다 :) github에서 문제를 제기하여 그 문제를 해결하는 것을 잊지 않을 수 있습니까? 감사합니다 크리스

+0

고마워요. 내가 생각하는 문제는 SupplierConsumingMapper를 사용하는 모든 집계에서 같을 것입니다 (거의 모든 집계에 포함 된 것으로 생각합니다). 이는 IMap에서 키와 동일한 키를 단순히 방출하기 때문입니다. 즉, 모든 단일 IMap 항목에 대해 Combiner 및 Reducer가 있음을 의미합니다. Collator 구현에서 호출 노드에서 모든 데이터 정렬이 발생하므로 아무 것도 결합되지 않고 축소되지 않습니다. – user155631

관련 문제