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 聚合計算并返回其基數。 |
|