RDS PostgreSQL提供roaringbitmap插件,可以使用位图计算功能,提高查询性能。
前提条件
背景信息
Roaring Bitmap算法是将32位的INT类型数据划分为216个数据块(Chunk),每一个数据块对应整数的高16位,并使用一个容器(Container)来存放一个数值的低16位。Roaring Bitmap将这些容器保存在一个动态数组中,作为一级索引。容器使用两种不同的结构:数组容器(Array Container)和位图容器(Bitmap Container)。数组容器存放稀疏的数据,位图容器存放稠密的数据。如果一个容器里面的整数数量小于4096,就用数组容器来存储值。若大于4096,就用位图容器来存储值。
采用这种存储结构,Roaring Bitmap可以快速检索一个特定的值。在做位图计算(AND、OR、XOR)时,Roaring Bitmap提供了相应的算法来高效地实现在两种容器之间的运算。使得Roaring Bitmap无论在存储和计算性能上都表现优秀。
注意事项
为确保插件的稳定性,建议升级到最新内核小版本。
说明 如需升级内核小版本,请参见升级内核小版本。
操作步骤
Bitmap函数列表
函数名 | 输入 | 输出 | 描述 | 示例 |
---|---|---|---|---|
rb_build | integer[] | roaringbitmap | 通过数组创建一个Bitmap。 |
|
rb_and | roaringbitmap,roaringbitmap | roaringbitmap | And计算。 |
|
rb_or | roaringbitmap,roaringbitmap | roaringbitmap | Or计算。 |
|
rb_xor | roaringbitmap,roaringbitmap | roaringbitmap | Xor计算。 |
|
rb_andnot | roaringbitmap,roaringbitmap | roaringbitmap | AndNot计算。 |
|
rb_cardinality | roaringbitmap | integer | 统计基数。 |
|
rb_and_cardinality | roaringbitmap,roaringbitmap | integer | And计算并返回基数。 |
|
rb_or_cardinality | roaringbitmap,roaringbitmap | integer | Or计算并返回基数。 |
|
rb_xor_cardinality | roaringbitmap,roaringbitmap | integer | Xor计算并返回基数。 |
|
rb_andnot_cardinality | roaringbitmap,roaringbitmap | integer | AndNot计算并返回基数。 |
|
rb_is_empty | roaringbitmap | boolean | 判断是否为空的Bitmap。 |
|
rb_equals | roaringbitmap,roaringbitmap | boolean | 判断两个Bitmap是否相等。 |
|
rb_intersect | roaringbitmap,roaringbitmap | boolean | 判断两个Bitmap是否相交。 |
|
rb_remove | roaringbitmap,integer | roaringbitmap | 从Bitmap移除特定的Offset。 |
|
rb_flip | roaringbitmap,integer,integer | roaringbitmap | 翻转Bitmap中特定的Offset段。 |
|
rb_minimum | roaringbitmap | integer | 返回Bitmap中最小的Offset,如果Bitmap为空则返回-1。 |
|
rb_maximum | roaringbitmap | integer | 返回Bitmap中最大的Offset,如果Bitmap为空则返回0。 |
|
rb_rank | roaringbitmap,integer | integer | 返回Bitmap中小于等于指定Offset的基数。 |
|
rb_iterate | roaringbitmap | setof integer | 返回Offset List。 |
|
Bitmap聚合函数列表
聚合函数名 | 输入 | 输出 | 描述 | 示例 |
---|---|---|---|---|
rb_build_agg | integer | roaringbitmap | 将Offset聚合成bitmap。 |
|
rb_or_agg | roaringbitmap | roaringbitmap | Or 聚合计算。 |
|
rb_and_agg | roaringbitmap | roaringbitmap | And 聚合计算。 |
|
rb_xor_agg | roaringbitmap | roaringbitmap | Xor 聚合计算。 |
|
rb_or_cardinality_agg | roaringbitmap | integer | Or 聚合计算并返回其基数。 |
|
rb_and_cardinality_agg | roaringbitmap | integer | And 聚合计算并返回其基数。 |
|
rb_xor_cardinality_agg | roaringbitmap | integer | Xor 聚合计算并返回其基数。 |
|