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(高效压缩位图)

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章