bitmap 压缩空间

前言:

bitmap是压缩空间的一个好方法。

byte  ->   8 bits  -->1字节
char  ->   16 bit  -->2字节
short ->   16 bits -->2字节
int   ->   32 bits -->4字节
float ->   32 bits -->4字节
long  ->   64 bits -->8字节

 8bit = >1byte  1024btye=>1KB 1024KB =>1MB 1024MB =>1GB

问题引入:

试想现在有一个场景,如果现在需要实现,在一段时间内,会有10亿的手机用户登录,现在有一个手机登录,怎么知道该手机是否已经登录,并把内存压缩到最小呢

 如果使用int数组存储的话大概要10亿*4字节=400000000/1024KB= 3906250KB=3906250/1024MB=‭3814.697265625‬MB≈3.7GB

如果用hashmap的key-value存储的话,还会更大。

而bitmap用的是数组的标志位来表达该数是否存在。借用网图,使用byte[i]坐标来表达数字。

 对于国内手机用户,11位数,即最多19999999999,约算200亿,200亿*1/8/1024/1024/1024GB=2.3GB

因为国内手机用户都是以1开头,若不算第一位约算100亿,大约是1.15GB

 倘若我们继续优化只计算目前市场流行的几种136,156...等开头的能继续节省不少的空间。

因此可以看到使用bitmap能够节省大量的空间。

 

但是这种bitmap并不是没有弱点:

1.数据碰撞,如果用bitmap存储String类型的时候,有可能出现两个String的int相同情况,这个时候可以使用布隆过滤器(bloom filter)。

2.数据稀疏,如果用bitmap就存储几个数据的时候,可以使用RoaringBitmap(高效压缩位图)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值