“唯一”意味着如果一个应用被用户下载超过 1 次,它的下载计数仍然是 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来存储用户+应用名称作为它的关键。但实际上,App Store 拥有大量用户和应用程序。假设用户数为 400M 并且有 650K 应用程序,则 HashSet 的大小将达到 400M * 650K = 260T 在最坏的情况下。我们还假设我们需要计算下载次数每天 .
根据Google Play hits 600,000 apps, 20 billion total installs , App Store 的总下载量为 300亿到 2012 年 6 月。仍然是一个很大的数字。
那么我们怎样才能用更少的空间又快速地实现呢?如果使用hadoop/hbase?
最佳答案
使用数据库:有一个 users
的表.每个用户都应该有下载历史。当用户下载一个应用程序时,它将被添加到下载历史中。如果这是一个新应用程序,它还将更新 app
表(使用触发器)来增加计数。听起来不错?
关于algorithm - App Store 如何计算每个应用的唯一下载次数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14191231/