UV统计(UV统计-HyperLogLog)

12、UV统计

12.1 、UV统计-HyperLogLog

首先我们搞懂两个概念:

  • UV:全称Unique Visitor,也叫独立访客量,是指通过互联网访问、浏览这个网页的自然人。1天内同一个用户多次访问该网站,只记录1次。
  • PV:全称Page View,也叫页面访问量或点击量,用户每访问网站的一个页面,记录1次PV,用户多次打开页面,则记录多次PV。往往用来衡量网站的流量。

通常来说UV会比PV大很多,所以衡量同一个网站的访问量,我们需要综合考虑很多因素,所以我们只是单纯的把这两个值作为一个参考值

UV统计在服务端做会比较麻烦,因为要判断该用户是否已经统计过了,需要将统计过的用户信息保存。但是如果每个访问的用户都保存到Redis中,数据量会非常恐怖,那怎么处理呢?

Hyperloglog(HLL)是从Loglog算法派生的概率算法,用于确定非常大的集合的基数,而不需要存储其所有值。相关算法原理大家可以参考:https://juejin.cn/post/6844903785744056333#heading-0
Redis中的HLL是基于string结构实现的,单个HLL的内存永远小于16kb内存占用低的令人发指!作为代价,其测量结果是概率性的,有小于0.81%的误差。不过对于UV统计来说,这完全可以忽略。

[外链图片转存中…(img-pBJqdRwL-1685768109377)]

12.2 UV统计-测试百万数据的统计

测试思路:我们直接利用单元测试,向HyperLogLog中添加100万条数据,看看内存占用和统计效果如何

[外链图片转存中…(img-61OQWyd2-1685768109377)]

经过测试:我们会发生他的误差是在允许范围内,并且内存占用极小

### UV统计原理 UV(Unique Visitor)是指独立访客数量,通常用于衡量某个时间段内的唯一访问者人数。为了实现精确的UV统计,可以采用多种技术手段来区分不同的用户。 一种常见的方法是通过用户的唯一标识符来进行识别。例如,在Web应用中,可以通过Cookie、IP地址或者设备指纹等方式标记每一个独特的访问者[^1]。然而,仅依靠单一维度的数据可能会存在一定的误差。比如,当多个用户共享同一个公共网络出口时,他们的请求可能显示相同的IP地址;反之,如果同一用户频繁切换网络环境,则可能导致其IP发生变化从而被误认为新的访问者[^3]。 针对更高效且可扩展性强的大规模在线服务场景下实施UV计算任务而言,Redis中的HyperLogLog算法提供了一种既节省内存又具备高效率解决方案的选择之一。它能够利用较少的空间估算集合基数,并保持较高的准确性水平,非常适合用来处理海量日志数据流中的去重操作以完成每日活跃度分析等工作需求[^2]。 另外值得注意的是,在某些情况下还需要考虑跨平台一致性问题以及长期趋势跟踪等方面的要求。因此除了短期记忆型工具外还需配合关系数据库定期备份重要汇总结果以便后续查询使用[^4]。 ### 防止UV统计被刷量的方法 对于防止恶意行为导致统计数据失真方面可以从以下几个角度出发制定策略: #### 数据验证与过滤 - **时间窗口控制**:设定合理的时间间隔内允许某特定源提交的有效次数上限。 - **异常模式检测**:建立基于机器学习模型或其他智能算法的风险评估体系,自动发现并拦截不符合正常浏览习惯的行为序列。 #### 用户身份强化认证 - **多因子组合判定**:综合运用包括但不限于HTTP头信息解析、地理定位推测等多重线索交叉核验真实终端特性。 - **动态验证码挑战**:适时引入图形或逻辑测试环节增加自动化脚本执行成本。 #### 后端架构优化 - **分布式缓存部署**:借助CDN节点分摊压力的同时也能就近捕捉潜在威胁信号。 - **异步消息队列处理**:分离实时交互界面反馈路径同后台持久化存储流程减少瓶颈影响范围。 ```python import redis r = redis.Redis(host='localhost', port=6379, db=0) def add_uv(user_id): r.pfadd('unique_visitors', user_id) def get_estimated_uvs(): return r.pfcount('unique_visitors') ``` 上述代码片段展示了如何利用Python连接到本地运行的一个Redis实例并通过调用`pfadd`命令向名为'unique_visitors'键对应的hyperloglog结构添加新条目代表新增加的一位独一无二访客;之后可通过`get_estimated_uvs()`函数获取当前估计得到总共有多少名不同个体曾经访问过该系统。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值