简介
Roaring Bitmap的算法是将整数的32-bit的范围 ([0, n]) 划分为 2^16 个数据块(Chunk),每一个数据块对应整数的高16位,并使用一个容器(Container)来存放一个数值的低16位。 Roaring Bitmap将这些容器保存在一个动态数组中,作为一级索引。容器使用两种不同的结构: 数组容器(Array Container)和 位图容器(Bitmap Container)。数组容器存放稀疏的数据,位图容器存放稠密的数据。如果一个容器里面的整数数量小于4096,就用数组容器来存储值。若大于4096,就用位图容器来存储值。
采用这种存储结构,Roaring Bitmap可以快速检索一个特定的值。在做位图计算(AND,OR,XOR)时,Roaring Bitmap提供了相应的算法来高效地实现在两种容器之间的运算。使得Roaring Bitmap无论在存储和计算性能上都变现优秀。
Roaring bitmaps是一种超常规的压缩BitMap。它的速度比未压缩的BitMap快上百倍。