2010-06-28 5 views
6

Java App Engine 앱에서 하루에 고유 사용자 수를 계산하려고합니다. 나는이 계산을 오프라인으로하기 위해 java appengine에 mapreduce 프레임 워크 (mapreduce.appspot.com)를 사용하기로 결정했다. 나는 단일 사용자 세션 이벤트를 나타내는 모든 엔티티를 거치는 맵 축소 작업을 생성 할 수있었습니다. 간단한 카운터도 사용할 수 있습니다. 그래도 몇 가지 질문이 있습니다.Mapreduce for Java Appengine을 사용하여 순 사용자 수를 계산합니다.

1) 각 사용자 ID마다 카운터를 한 번만 증분하는 방법은 무엇입니까? 현재 사용자 ID 속성을 포함하는 엔티티로 매핑하고 있지만 이러한 엔티티 중 많은 수가 동일한 사용자 ID를 포함 할 수 있습니다. 어떻게 한 번만 계산합니까?

2)이 작업 결과가이 카운터에 저장되면 어떻게 데이터 저장소에 유지할 수 있습니까? mapreduce의 상태 페이지에서 카운터의 결과를 확인하지만 이러한 결과가 자동으로 데이터 저장소에 보관되기를 바랍니다.

아이디어가 있으십니까?

답변

1

MapReduce 기능을 실제로 사용하지는 않았지만 내 이론적 인 이해는 매퍼 내에서 데이터 저장소에 데이터를 쓸 수 있다는 것입니다. UniqueCount와 같은 무언가라고하는 Entity 유형을 작성하고 매퍼가 이전에 보지 못했던 ID를 볼 때마다 하나의 엔티티를 삽입 할 수 있습니다. 당신은 얼마나 많은 고유 ID를 가지고 있는지 세어 볼 수 있습니다. 사실 새로운 고유 엔티티를 찾을 때마다 카운터를 업데이트 할 수 있습니다. 높은 처리량을 처리 할 수있는 데이터 저장소에 카운터를 만드는 방법에 대한 힌트는 google "샤드 카운터"를 참조하십시오.

결국 Reduce 기능이 끝나면이 모든 작업이 매우 사소해질 것이라고 생각합니다.

+0

"고유 한 엔티티를 찾을 때마다"- 찾고있는 엔티티 (현재 매핑 중)가 이전에 본 엔티티인지 어떻게 알 수 있습니까? – aloo

+0

매퍼가 사용자 ID ABC123으로 엔티티를 제공 받았다고 가정 해 봅시다. 당신이 할 첫 번째 일은 ABC123에 대한 UniqueCount 엔티티가 있는지 확인하는 것입니다. 존재한다면, 당신은 이미 그것을 설명했다는 것을 알고 있으며, 당신은 아무것도하지 않을 것입니다. 존재하지 않으면 ABC123에 대한 UniqueCount 엔티티를 생성합니다. 모든 엔티티에 대해이 작업을 완료하면 각 사용자에 대해 정확히 하나의 UniqueCount 엔티티를 갖게됩니다. 그런 다음 UniqueCount 엔티티의 수를 직접 계산할 수 있습니다. –

+0

아, 데이터 저장소에 다른 엔터티 유형을 만들고 두 개의 패스를 실행하는 과정이 필요합니다. 합리적인 것처럼 보였지만 좀 더 간단한 해결책이 필요했습니다. – aloo

관련 문제