HyperLogLog——用户日活(dau)、月活(mau)统计

本文涉及的产品
云数据库 Tair(兼容Redis),内存型 2GB
Redis 开源版,标准版 2GB
推荐场景:
搭建游戏排行榜
简介: HyperLogLog——用户日活(dau)、月活(mau)统计

HyperLogLog 是一种概率数据结构,用来估算数据的基数。数据集可以是网站访客的 IP 地址,E-mail 邮箱或者用户 ID。

基数就是指一个集合中不同值的数目,比如 a, b, c, d 的基数就是 4,a, b, c, d, a 的基数还是 4。虽然 a 出现两次,只会被计算一次。

精确的计算数据集的基数需要消耗大量的内存来存储数据集。在遍历数据集时,判断当前遍历值是否已经存在唯一方法就是将这个值与已经遍历过的值进行一一对比。当数据集的数量越来越大,内存消耗就无法忽视,甚至成了问题的关键。

使用 Redis 统计集合的基数一般有三种方法,分别是使用 Redis 的 HashMap,BitMap 和 HyperLogLog。前两个数据结构在集合的数量级增长时,所消耗的内存会大大增加,但是 HyperLogLog 则不会。

Redis 的 HyperLogLog 通过牺牲准确率来减少内存空间的消耗,只需要12K内存,在标准误差0.81%的前提下,能够统计2^64个数据。所以 HyperLogLog 是否适合在比如统计日活月活此类的对精度要不不高的场景。

这是一个很惊人的结果,以如此小的内存来记录如此大数量级的数据基数。下面我们就带大家来深入了解一下 HyperLogLog 的使用,基础原理,源码实现和具体的试验数据分析。

HyperLogLog 在 Redis 中的使用

Redis 提供了 PFADDPFCOUNTPFMERGE 三个命令来供用户使用 HyperLogLog。

PFADD 用于向 HyperLogLog 添加元素。

> PFADD visitors alice bob carol
(integer) 1
> PFCOUNT visitors
(integer) 3

如果 HyperLogLog 估计的近似基数在 PFADD 命令执行之后出现了变化, 那么命令返回 1 , 否则返回 0 。 如果命令执行时给定的键不存在, 那么程序将先创建一个空的 HyperLogLog 结构, 然后再执行命令。

PFCOUNT 命令会给出 HyperLogLog 包含的近似基数。在计算出基数后,PFCOUNT 会将值存储在 HyperLogLog 中进行缓存,知道下次 PFADD 执行成功前,就都不需要再次进行基数的计算。

PFMERGE 将多个 HyperLogLog 合并为一个 HyperLogLog , 合并后的 HyperLogLog 的基数接近于所有输入 HyperLogLog 的并集基数。

> PFADD customers alice dan
(integer) 1
> PFMERGE everyone visitors customers
OK
> PFCOUNT everyone
(integer) 4

image.png

参考: https://cloud.tencent.com/developer/article/1447306

https://www.cnblogs.com/chianquan/p/9505694.html


相关实践学习
基于Redis实现在线游戏积分排行榜
本场景将介绍如何基于Redis数据库实现在线游戏中的游戏玩家积分排行榜功能。
云数据库 Redis 版使用教程
云数据库Redis版是兼容Redis协议标准的、提供持久化的内存数据库服务,基于高可靠双机热备架构及可无缝扩展的集群架构,满足高读写性能场景及容量需弹性变配的业务需求。 产品详情:https://www.aliyun.com/product/kvstore     ------------------------------------------------------------------------- 阿里云数据库体验:数据库上云实战 开发者云会免费提供一台带自建MySQL的源数据库 ECS 实例和一台目标数据库 RDS实例。跟着指引,您可以一步步实现将ECS自建数据库迁移到目标数据库RDS。 点击下方链接,领取免费ECS&RDS资源,30分钟完成数据库上云实战!https://developer.aliyun.com/adc/scenario/51eefbd1894e42f6bb9acacadd3f9121?spm=a2c6h.13788135.J_3257954370.9.4ba85f24utseFl
相关文章
|
6月前
|
供应链 双11
老客GMV占比增长至60%,服企如何进行会员运营
老客GMV占比增长至60%,服企如何进行会员运营
118 0
老客GMV占比增长至60%,服企如何进行会员运营
|
16天前
|
存储 缓存 NoSQL
希音面试:亿级用户 日活 月活,如何统计?(史上最强 HyperLogLog 解读)
本文详细介绍了如何使用Redis的各种数据结构(如Set、Bitmap、HyperLogLog)来统计网站的日活(DAU)和月活(MAU)用户数。作者通过实际案例和代码示例,系统地讲解了这些数据结构的原理和应用场景,特别是HyperLogLog在处理亿级用户数据时的优势。文章还深入解析了HyperLogLog的数学原理和底层数据结构,帮助读者更好地理解和应用这一高效的数据统计工具。此外,文章还提供了多个相关面试题和参考资料,适合准备面试的技术人员阅读。
|
6月前
|
数据可视化
实时榜单排行计算
实时榜单排行计算
169 0
实时榜单排行计算
|
存储 NoSQL 数据挖掘
亿级用户游戏排行榜设计方案
亿级用户游戏排行榜设计方案
240 0
|
数据可视化 数据挖掘 BI
销售额和毛利额月度趋势分析
销售额和毛利额月度趋势分析
696 0
销售额和毛利额月度趋势分析
|
新零售 架构师 双11
2684亿成交!每秒订单峰值54.4W!这样的团队你想加入吗?
阿里巴巴新零售技术事业群淘系技术部招人啦~
1103 0
2684亿成交!每秒订单峰值54.4W!这样的团队你想加入吗?
|
SQL API Apache
天猫“双11”成交额实时统计技术详解
阿里巴巴资深技术专家莫问在2017年12月20日云栖大会北京峰会上做了题为“Apache Flink技术进阶”的主题演讲。Apache Flink作为流式计算引擎,支持了“双十一对的”实时计算,已经被国内外的公司使用。
4880 0
|
机器学习/深度学习 存储 边缘计算
|
监控 安全
增长黑客系列:今天比昨天增长多少?快使用环比函数来分析日志
增长黑客系列:今天比昨天增长多少?快使用环比函数来分析日志 在我们平时分析业务时,一个最重要的指标就是,今天比昨天增长多少,本周比上周增长多少;或者同上一个周期相比增长最大的分类是哪个?这些问题,可以使用一个SQL来分析。
3281 0
下一篇
无影云桌面