基数估计

简介:

问题的背景是在大数据冲击下,很多数据指标(尤其是涉及到去重的)的计算无法在合理的空间和时间内完成,比如uv的计算,数学原型问题等价于持续的向一个集合中写数,重复的不记,要求最终给出集合中不重复的元素的个数(集合的势)。而比较暴力的做法是随着数字增多不断的扩展集合的大小,让它放下所有的数,最终数出这个个数就OK。显然这样的空间复杂度在单机下是做不到的,所以多数做法是利用分布式原理将uv数据隔离到不同的计算节点,每个计算节点自行维护一个类似这样的集合(wdm实时里的布隆过滤器),然后分而治之,最后merge为一份结果数据。

      基数估计的初衷就是为了解决在大数据的前提下,如何以低成本的空间复杂度去计算超大集合的势的问题,换句话说,通过基数估计,单机做到计算亿级别uv,误差在4%以内。解决思路主要是概率估计,具体原理和做法参看 blog和论文原文。

     出于实验的目的,我简单实现了暴力做法bruteforce-bf,布隆过滤器-bbf,loglog-llc和hyperloglog-hllc四个算法,比较一下基数估计这个计算去重指标的逻辑是否可行(llc非常离谱,可能是我分桶数没有调整好,就不贴出结果了)。

预处理方法:1-N生成随机uid,模拟N次(均匀分布),jvm启动-Xmx1024m。

实验结果:

image   image

附加说明一下,期望值如何计算:其实这个实验的数学原型就是一个长度为k的均匀分布的(1-N)的随机数列,求不重复的元素个数的期望。我实验里k=n,这是一种极端情况(实验设计纯为方便计算,如果k较大会导致计算超慢,uv5000w时根本无法计算出来,增大k理论上会提高精度,我实验过的一组数据是100w uv 500wpv时 hllc的值是991234,误差<1%),理论上k相当于pv,在递推公式中k趋于无穷时期望等于n。

这个递推的计算可以通过组合分析推导,推导方法不详说了(当然我有可能推导错了~~数学功底 实在 不行了),通项公式见matlab代码。

syms e n;
e = n-(1/n)*((1-2*n+n*n)*((n-1)/n)^(n-2)+(1-n)*n+n*(n-1));

vpa(subs(e,'n',1000000),10)

另外,我个人认为分布式布隆过滤器的方案是非常好的,因为空间和时间都比较均衡,且精确度高,基数估计的方法本质上空间复杂度O(1),时间复杂度代码高效一点也可以非常快,但是缺点是精确度稍微欠缺,且不易分布式计算(因为它天生适合单进程,llc分桶均衡也是单进程做比较好,分布式完全是牛刀杀鸡)。

ref blog: http://blog.codinglabs.org/articles/cardinality-estimate-exper.html#ref4

算法实现的java代码可见github: https://github.com/changedi/card-estimate

目录
相关文章
|
4月前
|
人工智能 自然语言处理 安全
双第一,阿里云领跑安全运营智能体
全球权威咨询机构IDC发布了《中国安全运营智能体实测,2025》(Doc#CHC52346025,2025年11月)报告,报告针对国内20余家云厂商和安全厂商,从安全风险评估智能体、告警分诊智能体、事件调查与响应智能体、策略与规则管理智能体、威胁情报的收集与分析智能体、漏洞管理智能体、安全报告智能体、智能体管理等八大实测维度进行测评,整个测评流程依据IPDRR安全运营框架进行了严格测试。
|
存储 Windows
卸载时报错:“系统找不到指定的驱动器”问题处理
【10月更文挑战第5天】文档介绍了分析“系统找不到指定的驱动器”错误的原因及解决方法。此错误多因外部设备移除、网络驱动器断开或软件卸载程序缺陷引起。解决策略包括检查外部设备连接、更新驱动器盘符、使用第三方卸载工具以及手动清理注册表和文件系统。
5456 3
|
9月前
|
存储 数据可视化 BI
Python可视化应用——学生成绩分布柱状图展示
本程序使用Python读取Excel中的学生成绩数据,统计各分数段人数,并通过Matplotlib库绘制柱状图展示成绩分布。同时计算最高分、最低分及平均分,实现成绩可视化分析。
742 0
|
6月前
|
运维 监控 安全
公链应用开发智能合约部署全流程要点
本章聚焦公链智能合约部署全流程,明确目标、场景与边界条件,通过可量化验收、场景清单与对照分析,实现从编码到上线的可复用、可追溯落地。结合安全审计与跨链适配,提供标准化资源清单与分阶段操作模板,确保部署高效、可控、一致,支撑多链环境下的低故障率交付。
|
9月前
|
人工智能 自然语言处理 算法
蔚来汽车携手通义灵码入选 2025 世界人工智能大会标杆案例
在2025年世界人工智能大会上,通义灵码助力蔚来汽车提升研发效能,成功入选“人工智能+”行业标杆案例。蔚来已有近1000名工程师常态化使用该工具,AI生成代码占比超30%,在“天探”系统中更达70%,显著提升开发效率与代码质量,并正向更多核心领域扩展。
|
10月前
HarmonyOS实战:腾讯IM之消息删除、撤回和重发(三)
本文详细介绍了鸿蒙 IM 聊天中实现消息撤回、删除和重发功能的方法。消息撤回支持在 120 秒内召回自己发送的消息,通过 `revokeMessage` 方法实现;消息删除使用 `deleteMessage` 方法清除本地与云端记录;消息重发则先删除失败消息再重新发送,并处理用户被拉黑的异常情况。结合状态管理,可轻松实现类似微信的功能,建议点赞收藏并动手实践!
522 3
HarmonyOS实战:腾讯IM之消息删除、撤回和重发(三)
|
移动开发 JavaScript API
HarmonyOS Next 简单上手元服务开发
本文介绍了 HarmonyOS Next 中元服务的开发流程与关键特性。元服务是一种轻量级应用程序形态,支持免安装、秒开直达,适用于听音乐、打车等场景,大幅提升服务获取效率。文章详细讲解了元服务的开发旅程,包括在 AGC 平台上新建项目、修改名称与图标、新增卡片等内容,并提供了代码示例,如 AtomicServiceTabs 的 tab 切换和标题设置、AtomicServiceNavigation 的路由管理等。此外,还探讨了 AtomicServiceWeb 的使用方法,涵盖鸿蒙页面与 h5 页面的数据传递及方法调用。
1183 20
HarmonyOS Next 简单上手元服务开发
|
SQL 大数据 数据挖掘
玩转大数据:从零开始掌握SQL查询基础
玩转大数据:从零开始掌握SQL查询基础
453 35
|
存储 算法 C语言
C 408—《数据结构》算法题基础篇—链表(上)
408考研——《数据结构》算法题基础篇之链表(上)。
789 25
|
机器学习/深度学习 算法 数据挖掘
K-means聚类模型算法
K-means聚类模型算法