基数估算HyperLogLog】的更多相关文章

HyperLogLog HyperLogLog 可以接受多个元素作为输入,并给出输入元素的基数估算值: • 基数:集合中不同元素的数量.比如 {'apple', 'banana', 'cherry', 'banana', 'apple'} 的基数就是 3 . • 估算值:算法给出的基数并不是精确的,可能会比实际稍微多一些或者稍微少一些,但会控制在合理的范围之内. HyperLogLog 的优点是,即使输入元素的数量或者体积非常非常大,计算基数所需的空间总是固定的.并且是很小的. 在 Redis…
HyperLogLog 可以接受多个元素的输入,返回输入元素的基数估算值基数,集合中不同元素的数量.如集合{1,2,3,1,2,3,4}的基数是4.估算,HyperLogLog算法返回的基数不是完全精确的,但会控制在合理的范围内.HyperLogLog不会存储输入的多个元素,只返回估算的基数 127.0.0.1:6379> pfadd yy a b c a b c e (integer) 1127.0.0.1:6379> pfcount yy(integer) 4127.0.0.1:6379&…
所谓的基数计数就是统计一组元素中不重复的元素的个数.如统计某个网站的UV,或者用户搜索网站的关键词数量:再如对一个网站分别统计了三天的UV,现在需要知道这三天的UV总量是多少,怎么融合多个统计值. 1.方法 (假设元素个数为m,去重后个数为n) 1.集合操作去重 时间复杂为O(m2),空间复杂度随元素个数线性增长.数据量一大就崩了. 2.B+树 将数据插入到B+树中达到去重目的,然后顺序访问叶节点链从而得到n值.时间复杂的为O( lgm + n ),内存亦随元素个数线性增长.数据量一大就崩了.…
什么是基数估算 HyperLogLog 是一种基数估算算法.所谓基数估算,就是估算在一批数据中,不重复元素的个数有多少. 从数学上来说,基数估计这个问题的详细描述是:对于一个数据流 {x1,x2,...,xs} 而言,它可能存在重复的元素,用 n 来表示这个数据流的不同元素的个数,并且这个集合可以表示为{e1,...,en}.目标是:使用 m 这个量级的存储单位,可以得到 n 的估计值,其中 m<<n .并且估计值和实际值 n 的误差是可以控制的. 对于上面这个问题,如果是想得到精确的基数,可…
Redis系列1:深刻理解高性能Redis的本质 Redis系列2:数据持久化提高可用性 Redis系列3:高可用之主从架构 Redis系列4:高可用之Sentinel(哨兵模式) Redis系列5:深入分析Cluster 集群模式 追求性能极致:Redis6.0的多线程模型 追求性能极致:客户端缓存带来的革命 Redis系列8:Bitmap实现亿万级数据计算 Redis系列9:Geo 类型赋能亿级地图位置计算 1 前言 我们来回顾下在这个系列的第一篇 深刻理解高性能Redis的本质 中介绍过R…
  Redis 在 2.8.9 版本添加了 HyperLogLog 结构. Redis HyperLogLog 是用来做基数统计的算法,HyperLogLog 的优点是,在输入元素的数量或者体积非常非常大时,计算基数所需的空间总是固定 的.并且是很小的. 在 Redis 里面,每个 HyperLogLog 键只需要花费 12 KB 内存,就可以计算接近 2^64 个不同元素的基 数.这和计算基数时,元素越多耗费内存就越多的集合形成鲜明对比. 但是,因为 HyperLogLog 只会根据输入元素来…
如果我们要实现记录网站每天访问的独立IP数量这样的一个功能 集合实现: 使用集合来储存每个访客的 IP ,通过集合性质(集合中的每个元素都各不相同)来得到多个独立 IP ,然后通过调用 SCARD 命令来得出独立 IP 的数量.举个例子,程序可以使用以下代码来记录 2014 年 8 月 15 日,每个网站访客的 IP :ip = get_vistor_ip()SADD '2014.8.15::unique::ip' ip然后使用以下代码来获得当天的唯一 IP 数量:SCARD '2014.8.1…
摘自:http://www.mayou18.com/detail/o6M0v9mi.html Redis  HyperLogLog 结构讲解 Redis 在 2.8.9 版本添加了 HyperLogLog 结构. Redis HyperLogLog 是用来做基数统计的算法,HyperLogLog 的优点是,在输入元素的数量或者体积非常非常大时,计算基数所需的空间总是固定 的.并且是很小的. 在 Redis 里面,每个 HyperLogLog 键只需要花费 12 KB 内存,就可以计算接近 2^6…
redis HyperLogLog 可以接受多个元素作为输入,并给出输入元素的基数估算值. 基数:集合中不同元素的数量.比如 [foo', 'bar', 'foobar', 'bar', 'test'}]的基数就是 4. HyperLogLog 只提供了三个函数:pfadd.pfcount.pfmerge pfadd: 添加指定元素到 HyperLogLog 中. pfadd(key, *values) 返回值 整型,如果至少有个元素被添加返回 1, 否则返回 0. pfcount: 返回指定…
项目在统计UV/PV时用到了Druid的Hyper hyperunique算法,书上介绍这种算法求出的UV/PV存在一定误差,因此需要了解下误差来自哪里. 实现去重功能,最简单的就是使用set记录集合本身,缺点与前面Bloom Filter差不多,显而易见,需要大量内存空间.HyperLogLog为解决这个问题而生. 另外redis也实现了HyperLogLog的结构,所以可以从redis源码上分析下其实现. 1.基数计数 基数是指一个集合中不同元素的个数.假设有一组数据{1, 2, 3, 3,…