「一意」とは、ユーザーがアプリを2回以上ダウンロードした場合、別のユーザーがアプリを再度ダウンロードするまで、そのダウンロード数は永久に1のままであることを意味します。たとえば、ユーザーのダウンロードの動作を次のように追跡します。
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などのデータ構造を使用してユーザー+アプリ名をキーとして格納することです。しかし実際には、AppStoreにはたくさんのユーザーとアプリがあります。ユーザー数が400Mで、アプリが650Kあるとすると、HashSetのサイズは最悪の状況で400M * 650K= 260Tに達します。また、毎日ダウンロード数を計算する必要があると想定しています。
Google Playのヒット数は60万、インストール数は200億、AppStoreのダウンロード数は2012年6月までに300億に達しました。それでも、それは大きな数字です。
では、どうすればより少ないスペースで、しかも高速に実装できるでしょうか。hadoop / hbaseを使用する場合は?