"고유"는 사용자가 앱을 한 번 이상 다운로드하면 다른 사용자가 앱을 다시 다운로드 할 때까지 다운로드 횟수가 1 (영원히)임을 의미합니다. 예를 들어, 우리는 다음과 같은 사용자 다운로드의 행동을 추적 :App Store에서 모든 앱의 고유 다운로드 횟수를 계산하는 방법은 무엇입니까?
Date User App name
2012-01-01 jack Angry Birds
2012-01-01 jack Angry Birds
2012-01-02 jack Angry Birds
2012-01-02 paul Angry Birds
2012-01-02 jack Snappea
이 결과를 제공해야합니다 구현하는
Angry Birds 2
Snappea 1
간단한 방법을 우리가 을 저장하는 등 HashSet에 같은 데이터 구조를 사용한다는 것입니다 사용자 + 앱 이름을 키로 사용합니다. 그러나 실제로 App Store에는 많은 사용자와 응용 프로그램이 있습니다. 사용자 숫자가 400M이고 650,000 개의 앱이 있다고 가정하면 HashSet의 크기는 최악의 경우 400M * 650K = 260T에 도달합니다. 매일 다운로드 수 을 계산해야한다고 가정합니다..
Google Play hits 600,000 apps, 20 billion total installs에 따르면 앱 스토어의 전체 다운로드 수는 2012 년 6 월까지 입니다. 여전히 큰 숫자입니다.
어떻게 공간을 절약하면서도 빠르게 구현할 수 있습니까? hadoop/hbase를 사용한다면?
SQL에는 DISTINCT 및 COUNT 기능이 있습니다. 뭔가 : (녹슨 SQL에 대한 미안하지만, 아마 작동하지 않지만 생각은 비슷하다.) SELECT app, COUNT (SELECT DISTINCT app, myTable t2 사용자) from myTable t1; – amit
즉, 데이터베이스에 300 억 개의 행을 저장할 필요가 있음을 의미한다. ? 새 레코드를 추가 할 때 성능에 영향을 미칠 것 같아요. –
매일 계산할 것을 요청했습니다. 매일 COUNT 개 작성된 테이블을 업데이트하십시오. 대안은 Map>에 데이터를 유지하는 것입니다. '을 사용하여 고유 한 사용자 수를 얻으십시오. 간단히'map.get (app) .size()'로 –
amit