RoaringBitmap位图
前言
Bitmap目前是一种比较常见的计数统计模型,Bitmap的数据结构是二进制类型的按位统计,每一位都有两种状态(0,1)。
举个例子:比如我们要使用Bitmap记录当前系统的在线人数,假设我们系统有1000个用户(包含在线和不在线的用户),那么我们设定状态0为不在线, 1为在线状态,每一位的顺序代表用户id,初始化Bitmap(1000位)
那么此时模型:000000000… (1000个0)
假设用户id为7的用户登录,那么我们的Bitmap的第7位设置成1代表用户id为7的用户是在线状态。
此时模型:000000100…
因为二进制的特性我们可以进行一些与或非运算以及将二进制转换成十进制。
比如
- 每周在线的人数统计,将本周每天的Bitmap进行 | 运算 1|1 = 1。
- 当前日活总数,将二进制转为十进制就是目 000000100… = 1(十进制)
Bitmap 常用场景
- 快速排序(计数排序)
- 快速去重
- 快速查询(如刚刚提到的在线人数查询等)
Bitmap缺陷
Bitmap是一种非常好的数据结构,但是也存在着空间浪费的问题,比如我系统的在线人数是1,整个系统有1000w用户,那么就会造成大量的空间浪费。
RoaringBitmap
针对于Bitmap空间利用率低下的问题,RoaringBitmap相对于Bitmap有效的提高了空间利用率以及提供了更好的性能。并且被Lucene,Spark,Kylin开源框架所采用。
主要思想
RoaringBitmap主要思想是将数据的前1

RoaringBitmap是为了解决Bitmap空间利用率低下的问题而设计的,它提高了空间利用率并提供更好的性能,被多个开源框架采用。RoaringBitmap的主要思想是通过将数据分桶和使用ArrayContainer或BitmapContainer存储,降低空间浪费。ArrayContainer是动态有序数组,当数据量超过一定阈值时转换为BitmapContainer。这种数据结构适用于快速排序、去重和查询等场景。
最低0.47元/天 解锁文章
1063

被折叠的 条评论
为什么被折叠?



