とどろくビットマップは、効率的なデータ構造である。 ビットマップと比較して、轟音ビットマップは、より高い処理性能を提供し、より少ないメモリリソースを使用する。 咆哮するビットマップは、交差、和集合、差分集合演算、重複排除などの計算シナリオに適しています。 ほとんどの場合、とどろくビットマップは、ユーザープロファイリング、パーソナライズされた推奨、および精密マーケティングに使用されます。
背景情報
ビットマップは、値0と1で構成される一般的なデータ構造です。 各列に可能なすべての値を格納するために個別のビットマップが作成されます。 各ビットは、データ行が対応する列に値を有するかどうかを示す。 従来のビットマップは、大量のメモリリソースを使用する。 圧縮ビットマップの使用を推奨します。 轟音ビットマップは、さまざまなビッグデータプラットフォーム上のほぼすべての一般的なプログラミング言語で使用される効率的な圧縮ビットマップです。
概要
轟音ビットマップでは、各32ビット整数は、16の最上位ビットと16の最下位ビットを含む。 上位16ビットは複数のチャンクに格納され、下位16ビットはコンテナに格納される。 各チャンクは2 ^ 16までの整数を格納できます。 轟音ビットマップは、コンテナを動的に拡張するアレイに格納し、16の最上位ビットに基づいてコンテナをソートする。 最上位16ビットとバイナリ検索方法を使用して、コンテナをすばやく検索できます。 データ特性に基づいてデータを格納するには、次の種類のコンテナを使用します。
Array container: 分散データと非連続データを格納します。 配列コンテナーに格納できる整数は4,096個未満です。
ビットマップコンテナ: 多数の連続した整数を格納します。 ビットマップコンテナは、4,096以上の整数を格納できます。
Run container: 多数の連続して増加する値を格納します。 実行コンテナーは、コンテナーのサイズが配列コンテナーのサイズおよびビットマップコンテナーのサイズよりも小さい場合にのみ使用できます。
Roaringビットマップは、前述のストレージ構造を使用してデータ圧縮率を大幅に改善し、特定の値を迅速に取得します。 Roaringビットマップは、3つのタイプのコンテナ間のAND、OR、XORなどのビットマップ演算をサポートします。 轟音ビットマップは、優れたストレージとコンピューティング性能を提供します。
とどろくビットマップの詳細については、『GitHub』をご参照ください。
使用上の注意
V6.3.8.9以降のAnalyticDB for PostgreSQLインスタンスのみが轟音ビットマップをサポートしています。 AnalyticDB For PostgreSQLインスタンスのマイナーバージョンを表示する方法については、「インスタンスのマイナーバージョンの表示」をご参照ください。
轟音ビットマップを使用する
Install the extension
AnalyticDB for PostgreSQLインスタンスで轟音ビットマップを使用する前に、インスタンスの [拡張機能] ページにroaringbitmap拡張機能をインストールします。 詳細については、「拡張機能のインストール、更新、およびアンインストール」をご参照ください。
テーブルの作成
轟音のビットマップデータを格納するために使用されるテーブルを作成します。
CREATE TABLE t1 (id integer, bitmap roaringbitmap);
データの挿入
roaringビットマップデータを挿入するには、rb_build関数を使用します。
-- Set the bit values at specific positions in 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;
クエリデータ
1に設定されているビットの下付き文字を取得します。
SELECT RB_ITERATE(bitmap) FROM t1 WHERE id = 1;
ビットマップ操作のサンプル:
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;
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;
轟音ビットマップのカーディナリティを計算します。 カーディナリティは、轟音ビットマップにおいて1に設定されるビットの数である。
SELECT RB_CARDINALITY(bitmap) FROM t1;
ビットマップ計算関数
関数 | 入力 | 出力 | 説明 | 例 |
rb_build | integer[] | roaringbitmap | 整数配列から轟音ビットマップを作成します。 |
|
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 | 2つの轟音ビットマップに対してAND演算を実行してカーディナリティを計算します。 |
|
rb_or_cardinality | roaringbitmap,roaringbitmap | integer | 2つの轟音ビットマップに対してOR演算を実行して濃度を計算します。 |
|
rb_xor_cardinality | roaringbitmap,roaringbitmap | integer | 2つの轟音ビットマップに対してXOR演算を実行することによって濃度を計算します。 |
|
rb_andnot_cardinality | roaringbitmap,roaringbitmap | integer | 2つの轟音ビットマップに対してANDNOT演算を実行してカーディナリティを計算します。 |
|
rb_is_empty | roaringbitmap | Boolean | 轟音ビットマップが空かどうかをチェックします。 |
|
rb_equals | roaringbitmap,roaringbitmap | Boolean | 2つの轟音ビットマップが同じかどうかをチェックします。 |
|
rb_intersect | roaringbitmap,roaringbitmap | Boolean | 2つの轟音ビットマップが交差するかどうかを確認します。 |
|
rb_remove | roaringbitmap,integer | roaringbitmap | 轟音ビットマップから特定のオフセットを削除します。 |
|
rb_flip | roaringbitmap,integer | roraingbitmap | 轟音ビットマップの特定のオフセットを反転します。 |
|
rb_flip | roaringbitmap,integer,integer | roaringbitmap | 轟音ビットマップの特定のオフセット範囲を反転します。 |
|
rb_minimum | roaringbitmap | integer | 轟音ビットマップの最小オフセットを返します。 轟音ビットマップが空の場合、-1が返されます。 |
|
rb_maximum | roaringbitmap | integer | 轟音ビットマップで最大のオフセットを返します。 轟音ビットマップが空の場合、0が返されます。 |
|
rb_rank | roaringbitmap,integer | integer | 轟音ビットマップ内の特定のオフセット以下の要素の数を返します。 |
|
rb_iterate | roaringbitmap | setof整数 | 轟音ビットマップからのオフセットのリストを返します。 |
|
rb_contains | roaringbitmap, integer | bool | 轟音ビットマップに特定のオフセットが含まれているかどうかをチェックします。 |
|
rb_contains | roaringbitmap,integer,integer | bool | 轟音ビットマップに特定のオフセット範囲が含まれているかどうかを確認します。 |
|
rb_contains | roaringbitmap, roaringbitmap | bool | 轟音ビットマップに別の轟音ビットマップが含まれているかどうかをチェックします。 |
|
rb_becentained | 整数, roaringbitmap | bool | 特定のオフセットが轟音ビットマップに含まれているかどうかをチェックします。 |
|
rb_becentained | roaringbitmap,roaringbitmap | bool | 轟音ビットマップが別の轟音ビットマップに含まれているかどうかをチェックします。 |
|
rb_add | roaringbitmap, integer | roaringbitmap | 特定のオフセットを轟音ビットマップに追加します。 |
|
rb_add_2 | 整数, roaringbitmap | roaringbitmap | roaringbitmapに特定のオフセットを追加します。 |
|
rb_add | roaringbitmap,integer, integer | roaringbitmap | 特定のオフセット範囲を轟音ビットマップに追加します。 |
|
rb_remove | roaringbitmap,integer, integer | roaringbitmap | 轟音ビットマップから特定のオフセットを削除します。 |
|
rb_jaccard_index | roaringbitmap,roaringbitmap | float8 | 2つの轟音ビットマップ間のJaccard類似係数を計算します。 |
|
rb_to_array | roaringbitmap | integer[] | とどろくビットマップを配列に変換します。 |
|
rb_iterate_decrement | roaringbitmap | integer[] | 轟音ビットマップからのオフセットのリストを降順で返します。 |
|
ビットマップ集計関数Bitmap aggregate functions
関数 | 入力 | 出力 | 説明 | 例 |
rb_build_agg | integer | roaringbitmap | オフセットのグループから轟音ビットマップを作成します。 |
|
rb_or_agg | roaringbitmap | roaringbitmap | OR集計操作を実行します。 |
|
rb_and_agg | roaringbitmap | roaringbitmap | AND集計操作を実行します。 |
|
rb_xor_agg | roaringbitmap | roaringbitmap | XOR集計演算を実行します。 |
|
rb_or_cardinality_agg | roaringbitmap | integer | 2つの轟音ビットマップに対してOR集計演算を実行して濃度を計算します。 |
|
rb_and_cardinality_agg | roaringbitmap | integer | 2つの轟音ビットマップに対してAND集計演算を実行して濃度を計算します。 |
|
rb_xor_cardinality_agg | roaringbitmap | integer | 2つの轟音ビットマップに対してXOR集計演算を実行して濃度を計算します。 |
|
演算子
演算子 | 左 | 正しい | 出力 | 説明 | 例 |
& | roaringbitmap | roaringbitmap | roaringbitmap | 2つの轟音ビットマップに対してAND演算を実行します。 |
|
| | roaringbitmap | roaringbitmap | roaringbitmap | 2つの轟音ビットマップに対してOR演算を実行します。 |
|
# | roaringbitmap | roaringbitmap | roaringbitmap | 2つの轟音ビットマップに対してXOR演算を実行します。 |
|
~ | roaringbitmap | roaringbitmap | roaringbitmap | 2つの轟音ビットマップに対してANDNOT操作を実行します。 |
|
+ | roraingbitmap | integer | roaringbitmap | 特定のオフセットを轟音ビットマップに追加します。 |
|
- | roraingbitmap | integer | roaringbitmap | 轟音ビットマップから特定のオフセットを削除します。 |
|
= | roaringbitmap | roaringbitmap | Boolean | 2つの轟音ビットマップが同じかどうかをチェックします。 |
|
<> | roaringbitmap | roaringbitmap | Boolean | 2つの轟音ビットマップが異なるかどうかを確認します。 |
|
&& | roaringbitmap | roaringbitmap | Boolean | 2つの轟音ビットマップが交差するかどうかを確認します。 |
|
@> | roaringbitmap | roaringbitmap | Boolean | 轟音ビットマップに別の轟音ビットマップが含まれているかどうかをチェックします。 |
|
@> | roaringbitmap | integer | Boolean | 轟音ビットマップに特定のオフセットが含まれているかどうかをチェックします。 |
|
<@ | roaringbitmap | roaringbitmap | Boolean | 轟音ビットマップが別の轟音ビットマップに含まれているかどうかをチェックします。 |
|
<@ | integer | roaringbitmap | Boolean | 特定のオフセットが轟音ビットマップに含まれているかどうかをチェックします。 |
|