algorithm - App Store 如何计算每个应用的唯一下载次数?

标签 algorithm performance hadoop data-structures analytics

“唯一”意味着如果一个应用被用户下载超过 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/

相关文章:

c - 模式搜索朴素方法

c++ - 通过增加元素的频率对数组进行排序

.net - 生成唯一 ID(检查或不检查)?

java - 需要帮助理解有关并行流性能提升的文章

hadoop - HBase 压缩队列大小到底是多少?

hadoop - 捕获输出,访问标准输出文件

r - 在 r 中的数据框中搜索字符串的快速方法

algorithm - 如何实现 Apple iTunes 'Genius' 算法?

sql - SQL 中的稀疏点积

java - map 减少工作失败