| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 大数据 -> Redis中的HyperLogLog -> 正文阅读 |
|
[大数据]Redis中的HyperLogLog |
一、啥是HyperLogLog???? ? 一、初始HyperLogLog ? ? ? ? Redis中的HyperLogLog是一种基于基数估算的算法,所谓基数估算就是在一批数据中不重复的元素个数有多少个。 ????????基数计数(cardinality counting),则是指计算一个集合的基数,意即count-discint。 基数计算的场景很广泛,例如计算网站的访问uv,计算网络流量网络包请求header中的源地址的distinct数来作为网络攻击的重要指标。想要实现基数计数最直接想到的方式就是通过字典/HashSet,每条数据流入后直接保存相应的key,最后统一次集合的size就得到集合的基数。但是,这种方法的空间复杂度很高,在面对大数据的场景下做这样的统计代价很高。在近几十年有学者提出了很多基数估算的算法,在容许一定的误差的情况下,基于统计概率进行估算,本文的HyperLogLog就是一种基于基数估算的算法实现了不保存数据却可以实现去重计数。 ???????? 二、HyperLogLog能干啥
三、Redis中HyperLogLog????????千呼万唤始出来,描述了半天介绍下Redis中HyperLogLog的使用,HyperLogLog目前有三个方法PFADD(添加元素),PFCOUNT(返回指定基数估算值),PFMERGE(将多个HyperLogLog合并为一个HyperLogLog)。从字面意思就不难理解每个方法命令的含义(歪果仁的命名还是很见名知意的)。 ????????Tips:如果想使用=Redis的HyperLogLog,redis的version>=2.8.9 1、PFADD
2、PFCOUNT
3、PFMERGE
四、HyperLogLog原理? ? ? ? 上面简单介绍了HyperLogLog的使用场景以及命令下面来介绍下HyperLogLog原理。???????? ????????HyperLogLog 算法的基本思想来自伯努利过程。伯努利过程就是一个抛硬币实验的过程。抛一枚正常硬币,落地可能是正面,也可能是反面,二者的概率都是 1/2 。伯努利过程就是一直抛硬币,直到落地时出现正面位置,并记录下抛掷次数k。比如说,抛一次硬币就出现正面了,此时 k 为 1; 第一次抛硬币是反面,则继续抛,直到第三次才出现正面,此时 k 为 3。 ????????那么如何通过伯努利过程来估算抛了多少次硬币呢?还是假设 1 代表抛出正面,0 代表反面。连续出现两次 0 的序列应该为“001”,那么它出现的概率应该是三个二分之一相乘,即八分之一。那么可以估计大概抛了 8 次硬币。 ????????HyperLogLog 原理思路是通过给定 n 个的元素集合,记录集合中数字的比特串第一个1出现位置的最大值k,也可以理解为统计二进制低位连续为零(前导零)的最大个数。通过k值可以估算集合中不重复元素的数量m,m近似等于 2^k。但这这样计算仅仅是粗略的估算还是不太准确,Redis中的HyperLogLog是基于分桶优化。 分桶就是分多少轮。抽象到计算机存储中去,就是存储的是一个以单位是比特(bit),长度为 L 的大数组 S ,将 S 平均分为 m 组,注意这个 m 组,就是对应多少轮,然后每组所占有的比特个数是平均的,设为 P。容易得出下面的关系:
Redis中的HyperLogLog设置为:m=16834,p=6,L=16834 * 6。占用内存为=16834 * 6 / 8 / 1024 = 12K 形象化为:
回到现实中来看看是如何分配桶的
最终将每个桶的值代入到下面的DV公式中计算出最终基数估算值 ? 以上动态生成的工具在此处感兴趣的可以访问观看Sketch of the Day: HyperLogLog — Cornerstone of a Big Data Infrastructure – AK Tech Blog 五、结尾Redis中HyperLogLog就写到这里了,本文只是通过HyperLogLog列举了相关的对应知识点,具体详细的知识点如果大家感兴趣也可以继续深造。 参考文章 HyperLogLogJAVA算法实现工程 |
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/23 19:48:58- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |