原创

ELK学习之RBM压缩算法

RoaringBitMap压缩算法

一、什么是RBM算法

RBM算法是将一个数分为两个部分,可以简单理解就是将一个数按照二进制展开,取前面一半的位数和后面一半的位数,前面一般的数被称为得数,后面一半的数是余数。然后对除数创建一个key,后面的余数创建一个container(array container,bitmap container,run container)

二、举个例子

一个int(32位)的数字
000000···0 其中有32位
按照RBM算法先分为
00··00  00··00 
16位     16位
前16位为得数,后16位为余数
PS:这个除数是多少呢(32位就是 2^16 16位就是 2^8)
然后前16位的数字会按照这种方式创建一个keymap

|key| |----| |0| |1| |2| |···| |65535|

后面16位如何存储具体看其中使用哪一种container存储
array container简单理解就是container里面是一个个数组(有序不重复),其中存储的是余数的结果
hashmap container涉及到bitmap,container里面存储的是数字的下表,(需要有序数据没有重复的)。
如图假如一个数存的数里面有1,5,65542(00··1 0000 0000 0000 0110)等等
key container
0 000·····100010
1 000····1000000
2 ······
··· ······
65535 ·······

三、bitmapcontainer 和array container啥时候选用呢?

array container 在磁盘存储的空间,会随着存入的数据增加而增大,
bitmap container 不会随着你存入的数据增加而增大。
具体看数据量的大小,如果数据量较小一点选择array container存储更节省空间
数据量较大的时候选择bitmap container时候
以32位数据存储为例,这样看就是在4096时候array存储空间是和bitmap存储空间是一样的均为8kB

四、如果有相关错误的地方请指出来

笔记
  • 作者: qxb(联系作者)
  • 发表时间: 2022-06-19 23:20
  • 版权声明:自由转载-非商用-非衍生-保持署名(创意共享3.0许可证)
  • 公众号转载:请在文末添加作者公众号
  • 评论