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

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

最終更新日:Nov 12, 2024

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

前提条件

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

説明

この拡張機能は、PostgreSQL 17を実行するApsaraDB RDS for PostgreSQLインスタンスではサポートされていません。

背景情報

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

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

使用上の注意

拡張機能の安定性を確保するため、RDSインスタンスを最新のマイナーエンジンバージョンに更新することを推奨します。

説明

RDSインスタンスのマイナーエンジンバージョンを更新する方法の詳細については、「マイナーエンジンバージョンの更新」をご参照ください。

手順

  1. エクステンションを作成します。 例:

    CREATE EXTENSION roaringbitmap;
  2. roaringbitmapデータの格納に使用するテーブルを作成します。 例:

    CREATE TABLE t1 (id integer, bitmap roaringbitmap);
  3. rb_build関数を呼び出してroaringbitmapデータを挿入します。 例:

    -- Set the bit value of an array to 1.
    INSERT INTO t1 SELECT 1,RB_BUILD(ARRAY[1,2,3,4,5,6,7,8,9,200]);
    -- Set the bit values of multiple elements to 1 and aggregate the bit values into a roaring bitmap.  
    INSERT INTO t1 SELECT 2,RB_BUILD_AGG(e) FROM 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(bitmap) FROM t1;
    SELECT RB_AND_AGG(bitmap) FROM t1;
    SELECT RB_XOR_AGG(bitmap) FROM t1;
    SELECT RB_BUILD_AGG(e) FROM GENERATE_SERIES(1,100) e;
  6. 轟音ビットマップのカーディナリティを計算します。 カーディナリティは、轟音ビットマップにおいて1に設定されるビットの数である。 例:

    SELECT RB_CARDINALITY(bitmap) FROM t1;
  7. 1に設定されているビットのサブスクリプトを取得します。 例:

    SELECT RB_ITERATE(bitmap) FROM t1 WHERE id = 1;

ビットマップ計算関数

関数

入力

出力

説明

rb_build

integer[]

roaringbitmap

整数配列から轟音ビットマップを作成します。

rb_build('{1,2,3,4,5}')

rb_and

roaringbitmap,roaringbitmap

roaringbitmap

AND演算を実行します。

rb_and(rb_build('{1,2,3}'),rb_build('{3,4,5}'))

rb_or

roaringbitmap,roaringbitmap

roaringbitmap

OR演算を実行します。

rb_or(rb_build('{1,2,3}'),rb_build('{3,4,5}'))

rb_xor

roaringbitmap,roaringbitmap

roaringbitmap

XOR演算を実行します。

rb_xor(rb_build('{1,2,3}'),rb_build('{3,4,5}'))

rb_andnot

roaringbitmap,roaringbitmap

roaringbitmap

ANDNOT操作を実行します。

rb_andnot(rb_build('{1,2,3}'),rb_build('{3,4,5}'))

rb_cardinality

roaringbitmap

integer

カーディナリティを計算します。

rb_cardinality(rb_build('{1,2,3,4,5}'))

rb_and_cardinality

roaringbitmap,roaringbitmap

integer

2つの轟音ビットマップのAND演算からカーディナリティを計算します。

rb_and_cardinality(rb_build('{1,2,3}'),rb_build('{3,4,5}'))

rb_or_cardinality

roaringbitmap,roaringbitmap

integer

2つの轟音ビットマップのOR演算からカーディナリティを計算します。

rb_or_cardinality(rb_build('{1,2,3}'),rb_build('{3,4,5}'))

rb_xor_cardinality

roaringbitmap,roaringbitmap

integer

2つの轟音ビットマップのXOR演算からカーディナリティを計算します。

rb_xor_cardinality(rb_build('{1,2,3}'),rb_build('{3,4,5}'))

rb_andnot_cardinality

roaringbitmap,roaringbitmap

integer

2つの轟音ビットマップのANDNOT演算からカーディナリティを計算します。

rb_andnot_cardinality(rb_build('{1,2,3}'),rb_build('{3,4,5}'))

rb_is_empty

roaringbitmap

Boolean

轟音ビットマップが空かどうかをチェックします。

rb_is_empty(rb_build('{1,2,3,4,5}'))

rb_equals

roaringbitmap,roaringbitmap

Boolean

2つの轟音ビットマップが同じかどうかをチェックします。

rb_equals(rb_build('{1,2,3}'),rb_build('{3,4,5}'))

rb_intersect

roaringbitmap,roaringbitmap

Boolean

2つの轟音ビットマップが交差するかどうかを確認します。

rb_intersect(rb_build('{1,2,3}'),rb_build('{3,4,5}'))

rb_remove

roaringbitmap,integer

roaringbitmap

轟音ビットマップから特定のオフセットを削除します。

rb_remove(rb_build('{1,2,3}'),3)

rb_flip

roaringbitmap,integer,integer

roaringbitmap

轟音ビットマップの特定のオフセットを反転します。

rb_flip(rb_build('{1,2,3}'),2,3)

rb_minimum

roaringbitmap

integer

轟音ビットマップの最小オフセットを返します。 轟音ビットマップが空の場合、-1が返されます。

rb_minimum(rb_build('{1,2,3}'))

rb_maximum

roaringbitmap

integer

轟音ビットマップで最大のオフセットを返します。 轟音ビットマップが空の場合、0が返されます。

rb_maximum(rb_build('{1,2,3}'))

rb_rank

roaringbitmap,integer

integer

轟音ビットマップ内の指定されたオフセット以下の要素の数を返します。

rb_rank(rb_build('{1,2,3}'),3)

rb_iterate

roaringbitmap

setof整数

轟音ビットマップからのオフセットのリストを返します。

rb_iterate(rb_build('{1,2,3}'))

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

関数

入力

出力

説明

rb_build_agg

integer

roaringbitmap

オフセットのグループから轟音ビットマップを作成します。

rb_build_agg(1)

rb_or_agg

roaringbitmap

roaringbitmap

OR集計操作を実行します。

rb_or_agg(rb_build('{1,2,3}'))

rb_and_agg

roaringbitmap

roaringbitmap

AND集計操作を実行します。

rb_and_agg(rb_build('{1,2,3}'))

rb_xor_agg

roaringbitmap

roaringbitmap

XOR集計演算を実行します。

rb_xor_agg(rb_build('{1,2,3}'))

rb_or_cardinality_agg

roaringbitmap

integer

2つの轟音ビットマップのOR集計演算からカーディナリティを計算します。

rb_or_cardinality_agg(rb_build('{1,2,3}'))

rb_and_cardinality_agg

roaringbitmap

integer

2つの轟音ビットマップのAND集計演算からカーディナリティを計算します。

rb_and_cardinality_agg(rb_build('{1,2,3}'))

rb_xor_cardinality_agg

roaringbitmap

integer

2つの轟音ビットマップのXOR集計演算からカーディナリティを計算します。

rb_xor_cardinality_agg(rb_build('{1,2,3}'))