美文网首页面试精选
4.千万日活的系统如何统计UV?

4.千万日活的系统如何统计UV?

作者: Java程序鱼 | 来源:发表于2021-08-08 11:56 被阅读0次

HyperLogLog

假设有个千万日活的统计系统,需要统计系统每天的UV。如果是你的话你该怎么设计?

如果统计 PV 那非常好办,使用string的incr就搞定了。

但是 UV 不一样,它要去重,同一个用户一天之内的多次访问请求只能计数一次。这就要求每一个网页请求都需要带上用户的 ID,无论是登陆用户还是未登陆用户都需要一个唯一 ID 来标识。

我们第一反应就是为每一个页面搞一个独立的 set 集合来存储所有当天访问过此页面的用户 ID。当一个请求过来时,我们使用 sadd 将用户 ID 塞进去就可以了。通过 scard 可以取出这个集合的大小,这个数字就是这个页面的 UV 数据。没错,这是一个非常简单的方案。

存在问题:

①占用内存,set集合里有1000万条数据,如果一个用户ID占32个字节,一天就320M,这是非常恐怖的

②性能差,当数据量大时,sadd性能会下降

其实对于千万日活系统,老板需要的数据不需要太精确,1001万和1002万对于老板决策没有太大影响。

Redis 提供了 HyperLogLog 数据结构就是用来解决这种统计问题的。HyperLogLog 提供不精确的去重计数方案,虽然不精确但是也不是非常不精确,标准误差是 0.81%,这样的精确度已经可以满足上面的 UV 统计需求了。

常用命令

127.0.0.1:6379> pfadd uv user1 ## 将元素参数添加到 HyperLogLog 数据结构中
(integer) 1
127.0.0.1:6379> pfadd uv user2
(integer) 1
127.0.0.1:6379> pfadd uv user1
(integer) 0
127.0.0.1:6379> pfcount uv
(integer) 2

相关文章

  • 4.千万日活的系统如何统计UV?

    HyperLogLog 假设有个千万日活的统计系统,需要统计系统每天的UV。如果是你的话你该怎么设计? 如果统计 ...

  • Nginx笔记

    nignx日志统计 1.根据访问IP统计UV 2.统计访问URL统计PV 3.查询访问最频繁的URL 4.查询访问...

  • 微信广告平台

    功能: 1.支持多级代理2.广告主添加广告设置单价3.流量主领取广告, 分发链接4.平台自动统计uv 与ip 统计...

  • nginx系列:常用利用shell统计日志

    0x01:根据访问IP统计UV UV(Unique Visitor)独立访客,统计访问某站点的用户数; IP(In...

  • SparkStreaming项目实战,实时计算pv和uv(硬肝)

    最近有个需求,实时统计pv,uv,结果按照date,hour,pv,uv来展示,按天统计,第二天重新统计,当然了实...

  • 性能优化-记ThreadPoolExecutor和CountDo

    场景:作为电商系统,会经常需要统计某些商品的PV,UV,购物率等数据,并统计成可直观渲染查看的数据,供运营人员定制...

  • Redis应用实战

    一.统计每个页面的UV UV(Unique Visitor)独立访客,统计1天内访问某站点的用户数。每个用户每天在...

  • 3.千万日活的签到系统如何设计?

    假设有个百万签到系统,记录用户签到记录,签了记录1,没签记录 0,如果我们用redis的string存储,一年就要...

  • 从日志中识别 Spider

    博客引流 前面讲了如何利用脚本统计PV、UV,如何利用MapReduce对日志处理进行分布式操作 再继续探讨Had...

  • 统计PV、UV

    使用Hive日常工作基本上都会碰到统计PV、UV的需求,有如下日志表格式表: 统计一段时间内的PV、UV可以用如下...

网友评论

    本文标题:4.千万日活的系统如何统计UV?

    本文链接:https://www.haomeiwen.com/subject/zhbwvltx.html