大数据延时查询

时间:2018-09-24 02:29:13

标签: bigdata

我有一个包含100亿行的访问日志文件。每行包含时间戳和用户cookie字符串。为了简单起见,我们假设每个用户只有一个永久cookie字符串。 我需要使系统可以在给定的时间间隔内返回许多唯一的访问者。时间间隔必须至少为1天,最多3年。例如:5月26日至9月10日的唯一身份用户数。 我也只有4GB RAM和无限个HDD。 请提供任何有关我最好使用哪种DBMS以及哪种模式设计更好的想法。我从未处理过如此大的数据。

1 个答案:

答案 0 :(得分:1)

使用Redis内置的BITFIELD或SET功能是一种有效完成此操作的绝佳方法。基本上,您每天存储一个条目,其中包含该天的一组唯一标识符(在SET实现的情况下)或一个位字段,其中每个位置代表一个不同的Cookie ID(请注意,这些位置在时间上必须保持一致) ,如果您无法事先枚举ID(例如,流失率较高的Cookie ID),这将非常棘手)。

Avichal Garg @avichal在GetSpool.com上有一篇很棒的文章,其中他们针对这个确切的用例展示了出色的实时查询性能:

  

在模拟1.28亿用户的过程中,诸如“每日唯一用户”之类的典型指标在MacBook Pro上花费的时间少于50毫秒,而仅占用16 MB的内存。

请注意,此解决方案不仅可以让您计算唯一性,而且实际上可以告诉您确切的WHICH用户-并非以抽样或近似的HyperLogLog方式,而是以真实,完整和准确的用户列表告诉您方式。

在上一份工作中,我在生产中使用了相同的方法,我可以验证其结果。