基数估计

简介:

问题的背景是在大数据冲击下,很多数据指标(尤其是涉及到去重的)的计算无法在合理的空间和时间内完成,比如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

目录
打赏
0
0
0
0
951
分享
相关文章
Apache Calcite入门
Apache Calcite入门
625 0
VSCode安装配置使用教程(最新版超详细保姆级含插件)一文就够了
Visual Studio Code 是一个轻量级功能强大的源代码编辑器,支持语法高亮、代码自动补全(又称 IntelliSense)、代码重构、查看定义功能,并且内置了命令行工具和 Git 版本控制系统。适用于 Windows、macOS 和 Linux。它内置了对 JavaScript、TypeScript 和 Node.js 的支持,并为其他语言和运行时(如 C++、C#、Java、Python、PHP、Go、.NET)提供了丰富的扩展生态系统。为了不影响读者的沉浸式阅读学习,如需使用目录请在左侧使用即可。
6756 0
VSCode安装配置使用教程(最新版超详细保姆级含插件)一文就够了
资料合集|Flink Forward Asia 2024 上海站
Apache Flink 年度技术盛会聚焦“回顾过去,展望未来”,涵盖流式湖仓、流批一体、Data+AI 等八大核心议题,近百家厂商参与,深入探讨前沿技术发展。小松鼠为大家整理了 FFA 2024 演讲 PPT ,可在线阅读和下载。
7929 18
资料合集|Flink Forward Asia 2024 上海站
福利「Flink Forward Asia 2023 」视频合集!
2023 年 12 月 9 日,Flink Forward Asia 2023 在北京圆满结束。本届大会共有 70+ 演讲议题、30+ 一线大厂技术与实践分享。现所有专场回放视频已经出炉,并在开发者社区上线。
6204 2
福利「Flink Forward Asia 2023 」视频合集!
GPU计算资源智能调度:过去、现在和未来
随着AI和大数据技术发展,GPU成为关键计算组件。文章探讨了GPU计算资源调度从静态到动态再到智能调度的演变,现以机器学习优化资源利用率。未来趋势包括自适应调度、跨平台、集群级调度和能源效率优化,旨在提升GPU性能,推动人工智能和大数据领域进步。
修改IDEA占用的内存大小
修改IDEA占用的内存大小
1101 0
【Hadoop生态】HDFS入门,看完就懂
HDFS的入门,一片就够了,有实操,有理论
643 0
【Hadoop生态】HDFS入门,看完就懂
深入解析 Flink 细粒度资源管理
阿里巴巴高级开发工程师郭旸泽 (天凌) 在 FFA 2021 的演讲
深入解析 Flink 细粒度资源管理
AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等

登录插画

登录以查看您的控制台资源

管理云资源
状态一览
快捷访问