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