范文健康探索娱乐情感热点
投稿投诉
热点动态
科技财经
情感日志
励志美文
娱乐时尚
游戏搞笑
探索旅游
历史星座
健康养生
美丽育儿
范文作文
教案论文
国学影视

优秀的基数统计算法HyperLogLog

  为什么要使用 HyperLogLog?
  在我们实际开发的过程中,可能会遇到这样一个问题,当我们需要统计一个大型网站的独立访问次数时,该用什么的类型来统计?
  如果我们使用 Redis 中的集合来统计,当它每天有数千万级别的访问时,将会是一个巨大的问题。因为这些访问量不能被清空,我们运营人员可能会随时查看这些信息,那么随着时间的推移,这些统计数据所占用的空间会越来越大,逐渐超出我们能承载最大空间。
  例如,我们用 IP 来作为独立访问的判断依据,那么我们就要把每个独立 IP 进行存储,以 IP4 来计算,IP4 最多需要 15 个字节来存储信息,例如:110.110.110.110。当有一千万个独立 IP 时,所占用的空间就是 15 bit*10000000 约定于 143MB,但这只是一个页面的统计信息,假如我们有 1 万个这样的页面,那我们就需要 1T 以上的空间来存储这些数据,而且随着 IP6 的普及,这个存储数字会越来越大,那我们就不能用集合的方式来存储了,这个时候我们需要开发新的数据类型 HyperLogLog 来做这件事了。HyperLogLog 介绍
  HyperLogLog(下文简称为 HLL)是 Redis 2.8.9 版本添加的数据结构,它用于高性能的基数(去重)统计功能,它的缺点就是存在极低的误差率。
  HLL 具有以下几个特点:能够使用极少的内存来统计巨量的数据,它只需要 12K 空间就能统计 2^64 的数据;统计存在一定的误差,误差率整体较低,标准误差为 0.81%;误差可以被设置辅助计算因子进行降低。基础使用
  HLL 的命令只有 3 个,但都非常的实用,下面分别来看。添加元素127.0.0.1:6379> pfadd key "redis" (integer) 1 127.0.0.1:6379> pfadd key "java" "sql" (integer) 1
  相关语法:pfadd key element [element ...]
  此命令支持添加一个或多个元素至 HLL 结构中。统计不重复的元素127.0.0.1:6379> pfadd key "redis" (integer) 1 127.0.0.1:6379> pfadd key "sql" (integer) 1 127.0.0.1:6379> pfadd key "redis" (integer) 0 127.0.0.1:6379> pfcount key (integer) 2
  从 pfcount 的结果可以看出,在 HLL 结构中键值为 key 的元素,有 2 个不重复的值:redis 和 sql,可以看出结果还是挺准的。
  相关语法:pfcount key [key ...]
  此命令支持统计一个或多个 HLL 结构。合并一个或多个 HLL 至新结构
  新增 k 和 k2 合并至新结构 k3 中,代码如下:127.0.0.1:6379> pfadd k "java" "sql" (integer) 1 127.0.0.1:6379> pfadd k2 "redis" "sql" (integer) 1 127.0.0.1:6379> pfmerge k3 k k2 OK 127.0.0.1:6379> pfcount k3 (integer) 3
  相关语法:pfmerge destkey sourcekey [sourcekey ...]
  pfmerge 使用场景
  当我们需要合并两个或多个同类页面的访问数据时,我们可以使用 pfmerge 来操作。代码实战
  接下来我们使用 Java 代码来实现 HLL 的三个基础功能,代码如下:import redis.clients.jedis.Jedis;  public class HyperLogLogExample {     public static void main(String[] args) {         Jedis jedis = new Jedis("127.0.0.1", 6379);         // 添加元素         jedis.pfadd("k", "redis", "sql");         jedis.pfadd("k", "redis");         // 统计元素         long count = jedis.pfcount("k");         // 打印统计元素         System.out.println("k:" + count);         // 合并 HLL         jedis.pfmerge("k2", "k");         // 打印新 HLL         System.out.println("k2:" + jedis.pfcount("k2"));     } }
  以上代码执行结果如下:k:2 k2:2  HLL 算法原理
  HyperLogLog 算法来源于论文 HyperLogLog the analysis of a near-optimal cardinality estimation algorithm,想要了解 HLL 的原理,先要从伯努利试验说起,伯努利实验说的是抛硬币的事。一次伯努利实验相当于抛硬币,不管抛多少次只要出现一个正面,就称为一次伯努利实验。
  我们用 k 来表示每次抛硬币的次数,n 表示第几次抛的硬币,用 k_max 来表示抛硬币的最高次数,最终根据估算发现 n 和 k_max 存在的关系是 n=2^(k_max),但同时我们也发现了另一个问题当试验次数很小的时候,这种估算方法的误差会很大,例如我们进行以下 3 次实验:第 1 次试验:抛 3 次出现正面,此时 k=3,n=1;第 2 次试验:抛 2 次出现正面,此时 k=2,n=2;第 3 次试验:抛 6 次出现正面,此时 k=6,n=3。
  对于这三组实验来说,k_max=6,n=3,但放入估算公式明显 3 2^6。为了解决这个问题 HLL 引入了分桶算法和调和平均数来使这个算法更接近真实情况。
  分桶算法是指把原来的数据平均分为 m 份,在每段中求平均数在乘以 m,以此来消减因偶然性带来的误差,提高预估的准确性,简单来说就是把一份数据分为多份,把一轮计算,分为多轮计算。
  而调和平均数指的是使用平均数的优化算法,而非直接使用平均数。
  例如小明的月工资是 1000 元,而小王的月工资是 100000 元,如果直接取平均数,那小明的平均工资就变成了 (1000+100000)/2=50500  元,这显然是不准确的,而使用调和平均数算法计算的结果是 2/(1/1000+1/100000) 1998 元,显然此算法更符合实际平均数。
  所以综合以上情况,在 Redis 中使用 HLL 插入数据,相当于把存储的值经过 hash 之后,再将 hash 值转换为二进制,存入到不同的桶中,这样就可以用很小的空间存储很多的数据,统计时再去相应的位置进行对比很快就能得出结论,这就是 HLL 算法的基本原理,想要更深入的了解算法及其推理过程,可以看去原版的论文,链接地址在文末。小结
  当需要做大量数据统计时,普通的集合类型已经不能满足我们的需求了,这个时候我们可以借助 Redis 2.8.9 中提供的 HyperLogLog 来统计,它的优点是只需要使用 12k 的空间就能统计 2^64 的数据,但它的缺点是存在 0.81% 的误差,HyperLogLog 提供了三个操作方法 pfadd 添加元素、pfcount 统计元素和 pfmerge 合并元素。参考文献论文 HyperLogLog: the analysis of a near-optimal cardinality estimation algorithm

买了这款手机第三天我emo了本人就本篇文章,就本人新购手机的真实体验感而发,不针对品牌,只针对产品好坏。2020年时候入手一个华为p30,用得特别顺手,虽然标注的主摄只有4000万,但是拍照异常清晰,自动定位深色模式关于深色模式,身为头条的用户一直有个疑问,为什么深色模式不是黑色背?苹果手机用习惯了,如今用上鸿蒙系统,深色模式却只是调暗屏幕却不能真正变黑。我忍不了,于是我换成安卓机,结果不出意除甲醛空气净化器哪个牌子好分析新房装修,费了很多的时间和精力才打造好的房子,担心甲醛超标,接下来还得费精力除甲醛,感觉能住上新家实在太难了。其实随着科技的发展,除甲醛空气净化器就能很好的解决这个问题。那么空气净微信8。0。21内测版更新,支持朋友圈内容转发继微信8。0。22安卓内测版发布之后,苹果版微信也迎来了最新的内测版本苹果iOS8。0。21内测版。在这个全新的内测版本中,微信官方团队上线了一个非常实用的新功能,支持微信朋友圈内大公司一般在什么招聘软件上招聘?我是棕熊姐姐,希望我的回答可以帮助你。其实无论是大公司,还是小公司,主要看HR的习惯,有些传统的HR习惯在智联上招聘,一些互联网公司的HR可能更习惯在boss和拉勾上招聘,但总体来证券之星APP科网股早盘回暖,美团W(03690。HK)一度涨超7,截至发稿,美团涨5。02,报152。6港元阅文集团(00772。HK)涨3。94,报30。35港元京东集团(09618。HK)三星计划将代工的智能手机订单提高2000万部鞭牛士4月27日消息,据TheElec报道,三星计划将其在中国代工生产的智能手机提高2000万部,进而达到7000万部。消息人士表示,在中高端市场分别来自苹果和中国智能手机的竞争压王传福13岁丧父15岁丧母,嫂子卖嫁妆供上学,百亿身家不忘报恩2003年1月,比亚迪突然宣布控股秦川汽车公司,杀入汽车行业。当时的比亚迪,已是世界第二大电池制造商,突然转行,直接导致公司股票暴跌,27亿市值瞬间蒸发。就在谁都认为比亚迪是在作死听力损失达到什么程度时就需要干预了?听力损失达到40分贝以上建议佩戴助听器干预,但主要还是要关注自己的听力变化,如果发现自己说话声音变大,和人交流有时听不清,电视声音要调大了等等现象,就要到验配中心测测听力了。当我们什么样的电脑比较好?这个我认为是一个见仁见智的问题。苹果电脑有它的长处,但是也有它的短板,例如价格。PC的话,性价比更高,但是局限于系统性,有没有苹果系统来的更加优化。什么样的电脑比较好?说直接点,适当你发现你的微信里好友,她朋友圈是一条横杠你会怎么办?先试试是不是被删了,如删则删如果看到她朋友圈是一条横杆,不要慌张,不要忧愁,不要难过,你不一定是被她删除了好友,有可能是先拉黑再删除,还有可能是先屏蔽再拉黑再删除。先了解到底怎么了
2000亿元科技创新再贷款将向21家金融机构提供低成本资金新华社北京4月28日电(记者吴雨)记者28日从中国人民银行获悉,新设立的科技创新再贷款额度为2000亿元,将向21家金融机构提供低成本资金,引导其向科技企业发放贷款,撬动社会资金促新电商时代存量增长的人才法则随着移动互联网的不断发展,中国作为全球人口最多的国家同样进入互联网用户的存量时代。也就是说,新增网民已经越来越少,更多的是随时在线的老网民。CNNIC数据显示,截止2021年6月底苹果第二财季业绩公布营收973亿美元苹果公司今天公布了2022年第二财季的财务业绩,这相当于今年的第一个日历季度成绩单。在该季度,苹果的营收为973亿美元,季度净利润为250亿美元,每股稀释后收益为1。52美元,而去36氪首发国产自主几何引擎打造建筑产业元宇宙,建筑数字化管理服务商海赛未来获得数千万PreA轮融资36氪近日获悉,建筑数字化管理服务商海赛未来获得南通海门金玖一期科技股份投资基金数千万PreA轮融资。本次融资主要用于研发投入团队扩张与市场拓展。根据国家统计局数据,2020年全国2022年的低价性能机,千元价位优秀体验大家好,我是科技区手机推荐作者一只博学的花猫。手机是大家日常生活中使用最多的设备,性能的强弱,旗舰机的体验,以及续航都成为了大家买手机的客观条件。一个合格的手机不仅要满足上班的日常Mybatis如何批量删除数据Mybatis如何批量删除数据本期以最常用的根据id批量删除数据为例接口设计1List类型单参数IntegerdeleteByIds(Listids)1hr接口设计2Array数组华为watchgt3pro发布现已上架华为商城,本次手表有两款,一款是46毫米的钛合金款,另一款是43毫米的陶瓷款其中,钛合金属款黑色氟橡胶表带2488灰色真皮表带2688。太合金属款还是很商务的,适合男性使用一季度国内手机出货量下滑!苹果仅排第四,国产品牌OPPO拿下第一近日,权威数据统计机构IDC公布了2022年中国智能手机一季度出货量排行榜,在Q1季度的中国智能手机市场出货量仅为7420万台,同比下滑了14。1,因为市场饱和以及某种原因导致了下华为WATCHGT3Pro上手这就是智能手表颜值天花板?华为给WATCHGT3Pro配了两种外壳质感的版本,有陶瓷版,还有钛金属版陶瓷是市面旗舰智能手表营造高档感较为常见的材料,质地温润细而手中这钛金属版质感上更为硬朗。钛金属版华为WAiPhone14系列屏幕面板曝光!数字版小刘海,Pro版药丸虽然说iPhone每年更新一次,而且都是在9月份前后才发布,但是关于下一代iPhone的爆料,却能从年前持续到年尾。目前根据之前的爆料消息,最多的猜测是iPhone14系列将会有42021北京软件和信息技术服务综合实力企业(八十一)北京方正数码有限公司企业简介北京方正数码有限公司成立于2000年,是北大方正信息产业集团旗下专注于企业数字化转型和居民智慧生活业务的国家级高新技术企业,致力于成为智能社会的推动者和卓越贡献者。公司以应