すべてのプロダクト
Search
ドキュメントセンター

ApsaraDB RDS:roaringbitmap拡張子を使用する

最終更新日:Jan 11, 2024

このトピックでは、ApsaraDB RDS for PostgreSQLが提供するroaringbitmap拡張機能を使用してクエリのパフォーマンスを向上させる方法について説明します。

前提条件

RDSインスタンスはPostgreSQL 12以降を実行します。

背景情報

轟音ビットマップでは、32ビットの整数が2つの16チャンクに分割されます。 各チャンク内の整数は、同じ16の最上位ビットを共有する。 整数の下位16ビットはコンテナに格納される。 轟音ビットマップは、コンテナを一次インデックスとして動的配列に格納します。 2つのタイプのコンテナが利用可能である: 疎チャンクのための配列コンテナおよび密チャンクのためのビットマップコンテナ。 配列コンテナーには、最大4,096個の整数を格納できます。 ビットマップコンテナには、4,096を超える整数を格納できます。

咆哮するビットマップは、このストレージ構造を使用して特定の値をすばやく取得できます。 さらに、轟音ビットマップは、2つのタイプのコンテナ間のAND、OR、およびXORなどのビット単位の演算を提供する。 したがって、とどろくビットマップは優れたストレージとコンピューティング性能を提供できます。

使用上の注意

拡張機能の安定性を確保するため、RDSインスタンスを最新のマイナーエンジンバージョンに更新することを推奨します。
説明 RDSインスタンスのマイナーエンジンバージョンを更新する方法の詳細については、「マイナーエンジンバージョンの更新」をご参照ください。

手順

  1. エクステンションを作成します。 例:
    拡張roaringbitmapを作成します。
  2. roaringbitmapデータの格納に使用するテーブルを作成します。 例:
    CREATE TABLE t1 (id integer, bitmap roaringbitmap);
  3. rb_build関数を呼び出してroaringbitmapデータを挿入します。 例:
    -- 配列のビット値を1に設定します。
    t1に挿入SELECT 1、RB_BUILD (配列 [1,2、3,4、5,6、7,8、9,200]);
    -複数の要素のビット値を1に設定し、そのビット値を轟音ビットマップに集約します。  
    INSERT INTO t1 SELECT 2、RB_BUILD_AGG(e) からGENERATE_SERIES(1,100) e; 
  4. OR、AND、XOR、ANDNOTなどのビットマップ操作を実行します。 例:
    SELECT RB_OR(a.bitmap,b.bitmap) FROM (SELECT bitmap FROM t1 WHERE id = 1) AS a,(SELECT bitmap FROM t1 WHERE id = 2) AS b;
  5. OR、AND、XOR、BUILDなどのビットマップ集計演算を実行して、新しい轟音ビットマップを生成します。 例:
    SELECT RB_OR_AGG (ビットマップ) FROM t1;
    SELECT RB_AND_AGG (ビットマップ) からt1;
    SELECT RB_XOR_AGG (ビットマップ) からt1;
    SELECT RB_BUILD_AGG(e) FROM GENERATE_SERIES(1,100) e; 
  6. 轟音ビットマップのカーディナリティを計算します。 カーディナリティは、轟音ビットマップにおいて1に設定されるビットの数である。 例:
    SELECT RB_CARDINALITY (ビットマップ) FROM t1;
  7. 1に設定されているビットのサブスクリプトを取得します。 例:
    SELECT RB_ITERATE (ビットマップ) FROM t1 WHERE id = 1;

ビットマップ計算関数

関数入力出力説明
rb_buildinteger[]roaringbitmap整数配列から轟音ビットマップを作成します。
rb_build('{1,2,3,4,5}')
rb_androaringbitmap,roaringbitmaproaringbitmapAND演算を実行します。
rb_and(rb_build('{1,2,3}'),rb_build('{3,4,5}'))
rb_orroaringbitmap,roaringbitmaproaringbitmapOR演算を実行します。
rb_or(rb_build('{1,2,3}'),rb_build('{3,4,5}'))
rb_xorroaringbitmap,roaringbitmaproaringbitmapXOR演算を実行します。
rb_xor(rb_build('{1,2,3}'),rb_build('{3,4,5}'))
rb_andnotroaringbitmap,roaringbitmaproaringbitmapANDNOT操作を実行します。
rb_andnot(rb_build('{1,2,3}'),rb_build('{3,4,5}'))
rb_cardinalityroaringbitmapintegerカーディナリティを計算します。
rb_cardinality(rb_build('{1,2,3,4,5}'))
rb_and_cardinalityroaringbitmap,roaringbitmapinteger2つの轟音ビットマップのAND演算からカーディナリティを計算します。
rb_and_cardinality(rb_build('{1,2,3}'),rb_build('{3,4,5}'))
rb_or_cardinalityroaringbitmap,roaringbitmapinteger2つの轟音ビットマップのOR演算からカーディナリティを計算します。
rb_or_cardinality(rb_build('{1,2,3}'),rb_build('{3,4,5}'))
rb_xor_cardinalityroaringbitmap,roaringbitmapinteger2つの轟音ビットマップのXOR演算からカーディナリティを計算します。
rb_xor_cardinality(rb_build('{1,2,3}'),rb_build('{3,4,5}'))
rb_andnot_cardinalityroaringbitmap,roaringbitmapinteger2つの轟音ビットマップのANDNOT演算からカーディナリティを計算します。
rb_andnot_cardinality(rb_build('{1,2,3}'),rb_build('{3,4,5}'))
rb_is_emptyroaringbitmapBoolean轟音ビットマップが空かどうかをチェックします。
rb_is_empty(rb_build('{1,2,3,4,5}'))
rb_equalsroaringbitmap,roaringbitmapBoolean2つの轟音ビットマップが同じかどうかをチェックします。
rb_equals(rb_build('{1,2,3}'),rb_build('{3,4,5}'))
rb_intersectroaringbitmap,roaringbitmapBoolean2つの轟音ビットマップが交差するかどうかを確認します。
rb_intersect(rb_build('{1,2,3}'),rb_build('{3,4,5}'))
rb_removeroaringbitmap,integerroaringbitmap轟音ビットマップから特定のオフセットを削除します。
rb_remove(rb_build('{1,2,3}'),3)
rb_fliproaringbitmap,integer,integerroaringbitmap轟音ビットマップの特定のオフセットを反転します。
rb_flip(rb_build('{1,2,3}'),2,3)
rb_minimumroaringbitmapinteger轟音ビットマップの最小オフセットを返します。 轟音ビットマップが空の場合、-1が返されます。
rb_minimum(rb_build('{1,2,3}'))
rb_maximumroaringbitmapinteger轟音ビットマップで最大のオフセットを返します。 轟音ビットマップが空の場合、0が返されます。
rb_maximum(rb_build('{1,2,3}'))
rb_rankroaringbitmap,integerinteger轟音ビットマップ内の指定されたオフセット以下の要素の数を返します。
rb_rank(rb_build('{1,2,3}'),3)
rb_iterateroaringbitmapsetof整数轟音ビットマップからのオフセットのリストを返します。
rb_iterate(rb_build('{1,2,3}'))

ビットマップ集計関数Bitmap aggregate functions

関数入力出力説明
rb_build_aggintegerroaringbitmapオフセットのグループから轟音ビットマップを作成します。
rb_build_agg(1)
rb_or_aggroaringbitmaproaringbitmapOR集計操作を実行します。
rb_or_agg(rb_build('{1,2,3}'))
rb_and_aggroaringbitmaproaringbitmapAND集計操作を実行します。
rb_and_agg(rb_build('{1,2,3}'))
rb_xor_aggroaringbitmaproaringbitmapXOR集計演算を実行します。
rb_xor_agg(rb_build('{1,2,3}'))
rb_or_cardinality_aggroaringbitmapinteger2つの轟音ビットマップのOR集計演算からカーディナリティを計算します。
rb_or_cardinality_agg(rb_build('{1,2,3}'))
rb_and_cardinality_aggroaringbitmapinteger2つの轟音ビットマップのAND集計演算からカーディナリティを計算します。
rb_and_cardinality_agg(rb_build('{1,2,3}'))
rb_xor_cardinality_aggroaringbitmapinteger2つの轟音ビットマップのXOR集計演算からカーディナリティを計算します。
rb_xor_cardinality_agg(rb_build('{1,2,3}'))