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?相关推荐

  1. 【北京站】技术沙龙第19期:千万日活量级 iOS 应用背后的技术

    美团点评技术沙龙由美团·点评技术团队主办,每期沙龙邀请美团 · 点评及其他互联网公司的技术专家分享来自一线的实践经验,覆盖各主要技术领域. 美团·大众点评作为国内最大的 O2O 平台,旗下有多个iOS ...

  2. 深度揭秘:从“0”到“数千万”日活,咪咕视讯高速增长...

    咪咕视讯是中国移动旗下咪咕文化科技有限公司的全资子公司,旗下产品涵盖包括直播.影业.视频等,截至2016年3月,咪咕视讯平台拥有千万量级的正版视频内容库,构建了高出4000万的付用度户群,成为海内领先 ...

  3. vue怎么传数据给后台_千万日活级产品人必备:数据监控后台之数据指标怎么选?...

    [导读]通过核心业务驱动是快速搭建数据监控指标体系的不二法则! 文|三爷 3530字 1 为什么要有数据监控后台? 随着创业大潮的兴起,市场中很多初创公司在初期为了快速上线,往往选择只进行功能开发,而 ...

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

    假设有个百万签到系统,记录用户签到记录,签了记录1,没签记录 0,如果我们用redis的string存储,一年就要存1000000*365个key,会占用大量的内存. 为了解决这个问题,Redis 提 ...

  5. 闲鱼|支撑千万日活的交易链路架构如何设计?

    点击蓝色"架构文摘"关注我哟 加个"星标",每天上午 09:25,干货推送! 前言 双十一刚刚结束,成交额2684亿震惊全世界,每秒订单峰值达54.4W笔.在闲 ...

  6. 用户日活月活怎么统计 - Redis HyperLogLog 详解

    点击上方"程序员历小冰",选择"置顶或者星标" 你的关注意义重大! HyperLogLog 是一种概率数据结构,用来估算数据的基数.数据集可以是网站访客的 IP ...

  7. 微信技术总监:11亿日活的超大型系统架构之道!13页ppt详解

    点击"技术领导力"关注∆  每天早上8:30推送 作者| 周颢    整理| Mr.K 来源| 技术领导力(ID:jishulingdaoli) 作者,微信技术总监 周颢,2001 ...

  8. 面试官:支撑日活百万用户的高并发系统,应该如何设计其数据库架构?

    点击上方"蓝字", 右上角选择"设为星标" 周一至周五早11点半!精品文章准时送上! 本文转载自公众号:石杉的架构笔记 目录:                  ...

  9. 怎么往integer型数组添加数据_用户日活月活怎么统计 - Redis HyperLogLog 详解

    HyperLogLog 是一种概率数据结构,用来估算数据的基数.数据集可以是网站访客的 IP 地址,E-mail 邮箱或者用户 ID. 基数就是指一个集合中不同值的数目,比如 a, b, c, d 的 ...

最新文章

  1. Djang1.8+Python2.0迁移到Django2.0+Python3.6注意事项(转)
  2. 端到端对话模型新突破!Facebook发布大规模个性化对话数据库
  3. 常用服务的默认端口号
  4. python使用redis在实际场景使用_用python操作redis及redis的一些应用场景
  5. 我的第一个Github项目上线了
  6. 2015美国数学建模a代码c语言,美国数学建模比赛2020 MCM C题代码详解
  7. 微软改进的DSSM结构:
  8. 写了个算分压电阻阻值的MATLAB小程序
  9. office文档管理服务器编辑,office在线编辑方案
  10. 音视频基本概念:分辨率、帧速率、码流、采样位深、采样率、比特率
  11. GPIO设备虚拟文件结点的创建【转】
  12. 一小时快速建立数据分析平台
  13. 春招面经总结(获携程Offer)
  14. 普通索引 唯一索引 主键索引 组合索引 全文索引
  15. 分析器错误消息: 无法执行程序。所执行的命令为 C:\Windows\Microsoft.NET\Framework\v4.0 \csc.exe/noconfig/fullpaths@C:\W
  16. 哈夫曼树的概念与特点
  17. 基于jsp java的汽车维修管理系统
  18. 纳指万点!苹果微软市值1.5万亿美元,腾讯阿里能否破万亿?
  19. C语言文法(BNF)
  20. 【WP】DASCTF2021

热门文章

  1. 美通社企业新闻汇总 | 2019.1.23 | 上海迪士尼建疯狂动物城园区;戴森运营总部移至新加坡...
  2. java毕业设计商品供应管理系统mybatis+源码+调试部署+系统+数据库+lw
  3. 印象笔记Android怎样创建md,LocalNote,让你像使用本地文件一样使用印象笔记(支持 markdown 格式)...
  4. 印象笔记android,印象笔记(Evernote) Android SDK 更新
  5. 软件项目管理案例教程-韩万江-期末复习
  6. “稳定婚姻算法”雨夜谈-M/N资源匹配问题
  7. godoc使用方法介绍
  8. 训练fater rcnn时出现path not exist问题
  9. java php python校园通知事项打卡 微信小程序系统
  10. VB 数据库交互(二)——经典五实例总结