基数计数——HyperLogLog】的更多相关文章

所谓的基数计数就是统计一组元素中不重复的元素的个数.如统计某个网站的UV,或者用户搜索网站的关键词数量:再如对一个网站分别统计了三天的UV,现在需要知道这三天的UV总量是多少,怎么融合多个统计值. 1.方法 (假设元素个数为m,去重后个数为n) 1.集合操作去重 时间复杂为O(m2),空间复杂度随元素个数线性增长.数据量一大就崩了. 2.B+树 将数据插入到B+树中达到去重目的,然后顺序访问叶节点链从而得到n值.时间复杂的为O( lgm + n ),内存亦随元素个数线性增长.数据量一大就崩了.…
读过<编程珠玑>(<Programming Pearls>)的人应该还对开篇的Case记忆犹新,大概的场景是: 作者的一位在电话公司工作的朋友想要统计一段时间内不同的电话号码的个数,电话号码的数量很大,当时的内存很小,所以不能把所有的电话号码全部放到内存来去重统计,他的朋友很苦恼. 作者聪明的想到了用bit数组来解决问题,每个电话号码可以映射为bit数组的index,bit数组初始状态所有位为0,所有电话号码逐一处理:将bit数组对应位置为1,处理完之后统计bit数组中有多少个1即…
HyperLogLog HyperLogLog 可以接受多个元素作为输入,并给出输入元素的基数估算值: • 基数:集合中不同元素的数量.比如 {'apple', 'banana', 'cherry', 'banana', 'apple'} 的基数就是 3 . • 估算值:算法给出的基数并不是精确的,可能会比实际稍微多一些或者稍微少一些,但会控制在合理的范围之内. HyperLogLog 的优点是,即使输入元素的数量或者体积非常非常大,计算基数所需的空间总是固定的.并且是很小的. 在 Redis…
摘要:高斯Redis,计数的最佳选择! 一.背景 当我们打开手机刷微博时,就要开始和各种各样的计数器打交道了.我们注册一个帐号后,微博就会给我们记录一组数据:关注数.粉丝数.动态数-:我们刷帖时,关注每天的热搜情况,微博需要为每个热搜记录一组搜索量.在这一串数据后面,是一个个计数器在工作. 计数器可以分为常规计数器和基数计数器,对于常规计数器,只需要对计数器进行简单的增减即可:对于基数计数器,需要对元素进行去重,比如统计搜索量时,需要保证每个用户的多次搜索只统计一次.对于这两种需求,Redis…
Redis系列1:深刻理解高性能Redis的本质 Redis系列2:数据持久化提高可用性 Redis系列3:高可用之主从架构 Redis系列4:高可用之Sentinel(哨兵模式) Redis系列5:深入分析Cluster 集群模式 追求性能极致:Redis6.0的多线程模型 追求性能极致:客户端缓存带来的革命 Redis系列8:Bitmap实现亿万级数据计算 Redis系列9:Geo 类型赋能亿级地图位置计算 1 前言 我们来回顾下在这个系列的第一篇 深刻理解高性能Redis的本质 中介绍过R…
基数计数(cardinality counting)是实际应用中一种常见的计算场景,在数据分析.网络监控及数据库优化等领域都有相关需求.精确的基数计数算法由于种种原因,在面对大数据场景时往往力不从心,因此如何在误差可控的情况下对基数进行估计就显得十分重要.目前常见的基数估计算法有Linear Counting.LogLog Counting.HyperLogLog Counting及Adaptive Counting等.这几种算法都是基于概率统计理论所设计的概率算法,它们克服了精确基数计数算法的…
项目在统计UV/PV时用到了Druid的Hyper hyperunique算法,书上介绍这种算法求出的UV/PV存在一定误差,因此需要了解下误差来自哪里. 实现去重功能,最简单的就是使用set记录集合本身,缺点与前面Bloom Filter差不多,显而易见,需要大量内存空间.HyperLogLog为解决这个问题而生. 另外redis也实现了HyperLogLog的结构,所以可以从redis源码上分析下其实现. 1.基数计数 基数是指一个集合中不同元素的个数.假设有一组数据{1, 2, 3, 3,…
1.HyperLoglog简介 HyperLoglog是redis新支持的两种类型中的另外一种(上一种是位图类型Bitmaps).主要适用场景是海量数据的计算.特点是速度快.占用空间小. 同样是用于计算,HyperLoglog在适用场景方面与Bitmaps方面有什么不同呢.我个人的理解是,Bitmaps更适合用于验证的大数据,比如签到, 记录某用户是不是当天进行了签到,签到了多少天的时候.也就是说,你不光需要记录数据,还需要对数据进行验证的时候使用Bitmaps. HyperLoglog则用于只…
(1)HyperLogLog简介 在Redis 在 2.8.9 版本才添加了 HyperLogLog,HyperLogLog算法是用于基数统计的算法,每个 HyperLogLog 键只需要花费 12 KB 内存,就可以计算接近 2^64 个不同元素的基数.HyperLogLog适用于大数据量的统计,因为成本相对来说是更低的,最多也就占用12kb内存 业务场景,HyperLogLog常用于大数据量的统计,比如页面访问量统计或者用户访问量统计 举个例子,假如要统计一个页面的访问量(PV),这个还比较…
一.HyperLogLog 简介 HyperLogLog 是最早由 Flajolet 及其同事在 2007 年提出的一种 估算基数的近似最优算法.但跟原版论文不同的是,好像很多书包括 Redis 作者都把它称为一种 新的数据结构(new datastruct) (算法实现确实需要一种特定的数据结构来实现). 关于基数统计 基数统计(Cardinality Counting) 通常是用来统计一个集合中不重复的元素个数. 思考这样的一个场景: 如果你负责开发维护一个大型的网站,有一天老板找产品经理要…