RoaringBitmap位图

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

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

前言

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用户,那么就会

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值