2013-01-07 45 views
-4

“独一无二”意味着如果一个应用程序被用户下载超过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,并且它有650K个应用程序,那么在最差的情况下,HashSet的大小将达到400M * 650K = 260T。我们还假设我们需要计算每天下载计数

Google Play hits 600,000 apps, 20 billion total installs,App Store的总下载数为30十亿 2012年6月仍是一个大数目。

那么我们怎样才能用更少的空间来实现而且快速?如果使用hadoop/hbase?

+0

SQL具有DISTINCT和COUNT功能。例如:(抱歉生锈的SQL,可能不会工作,但想法是类似的:'SELECT应用程序,COUNT(选择DISTINCT应用程序,用户FROM myTable t2)FROM myTable t1;' – amit

+0

这意味着数据库需要存储300亿行?我想这会在添加新记录时影响性能 –

+0

您要求每天计算一次,只需更新COUNT每天创建的表格,另一种方法是将数据保存在“Map > ',并通过'map.get(app).size()'得到唯一用户的数量。 – amit

回答

0

使用数据库:有一个表格users。每个用户都应该有下载的历史记录。当用户下载应用程序时,它将被添加到下载历史中。如果这是一个新的应用程序,它也将更新app表(使用触发器)来增加计数。听起来不错?

+0

看起来不错。谢谢你的回答。但是你将如何处理重新下载的用户应用?@zenpoy –

+0

只有当它是用户应用程序历史记录中的新应用程序时,才会增加应用程序的计数。 – zenpoy

相关问题