ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

Bitmap和HyperLogLog

2021-10-16 15:02:14  阅读:182  来源: 互联网

标签:index 字节 IP Bitmap 基数 HyperLogLog


Bitmap(位存储)

概念:Bitmap即位图数据结构,都是操作二进制位来进行记录,只有0 和 1 两个状态。

例如 11001001,表示的是[1,2,5,8],Bitmap中1的个数就是基数。

Bitmap的长度和集合中元素的个数无关,而是与基数的上限有关。假如要计算上限为1亿的基数,则需要12.5M字节的Bitmap,就算集合中只有10个元素也需要12.5M。计算内存的方法:100000000/8/1024/1024 ≈ 12.5M。但是如果需要统计1000个对象,就需要大约12G的内存。

Bitmap也可以轻松合并多个集合,只需要将多个数组进行异或操作就可以。

常用命令

命令 简述 使用
setbit 设置位图的index位为status(1或0) setbit bitmap index status
getbit 获取位图的index位状态 getbit bitmap index
bitcount 统计位图1 的个数 bitcount bitmap

应用场景

比如:统计用户信息,活跃、不活跃!登录、未登录!打卡、未打卡!两个状态的,都可以使用BitMap。

如果存储一年的打卡状态需要多少内存呢?365 天 = 365 bit 1 字节 = 8 bit ,46个字节左右。

HyperLogLog(基数统计)

一个大型的网站,每天IP比如有100万,粗算一个IP消耗15字节,那么100万个IP就是15M。而HyperLogLog在Redis中每个键占用的内容都是12K,理论存储近似接近264个值,不管存储的内容是什么,他是一个基于基数估算的算法, 只能比较准确的估算出基数,可以使用少量固定的内存去存储并识别集合中的唯一元素。而且这个估算的基数并不一定准确,是一个带有0.81%标准错误的近似值。

常用命令

命令 简述 使用
pfadd 添加指定元素到 HyperLogLog 中 pfadd key element [element...]
pfcount 返回给定 HyperLogLog 的基数估算值 pfcount key
pfmerge 将多个 HyperLogLog 合并为一个 HyperLogLog pfmerge destkey sourcekey [sourcekey ...]

应用场景

  • 统计各种计数。比如注册IP数、每日访问IP数、页面实时UV、在线用户数、共同好友数等。

标签:index,字节,IP,Bitmap,基数,HyperLogLog
来源: https://www.cnblogs.com/Cherish486/p/15414198.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有