AnalyticDB for PostgreSQL は、行指向、列指向、ハイブリッド行列表の 3 つのストレージモデルをサポートしています。テーブルを作成する際に、適切なモデルを選択してください。
ストレージモデルの選択
選択するモデルは、書き込みスループット、クエリパフォーマンス、圧縮率に影響します。以下の基準に基づいて決定してください。
基準 | 行指向 | 列指向 | ハイブリッド行列表 |
書き込みパターン | 頻繁な更新、リアルタイム INSERT | バッチロード (`COPY`、`INSERT INTO SELECT`) | 混合:リアルタイム書き込みとバッチロードの両方 |
クエリパターン | ポイントクエリ、全行アクセス | 少数の列に対する集計 (例: | 両方 |
圧縮 | 標準 | 行指向より 3~5 倍高い | 書き込みメソッドに基づく自動選択 |
バージョン要件 | すべてのバージョン | すべてのバージョン | V7.0 のみ |
Data Transmission Service (DTS) との互換性 | 必須 (宛先テーブルは行指向である必要があります) | サポートされていません | サポートされていません |
ハイブリッド行列表ストレージは、AnalyticDB for PostgreSQL V7.0 でのみ利用可能です。
ストレージモデルの指定
CREATE TABLE の WITH 句を使用して、ストレージモデルを設定し、圧縮を構成します。以下のパラメーターがサポートされています。
パラメーター | 説明 | デフォルト | 有効な値 |
| ストレージモデル。ハイブリッド行列表ストレージはここでは設定できません。代わりに |
|
|
| 追記型ストレージを有効にします。列指向テーブルで必須です。 |
|
|
| 圧縮アルゴリズム。 | V4.3 および V6.0: | 「データ圧縮」をご参照ください |
| 圧縮レベル。値が大きいほど圧縮率は高くなりますが、速度は低下します。 |
|
|
行指向テーブル
デフォルトでは、AnalyticDB for PostgreSQL は PostgreSQL のヒープストレージモデルを使用して行指向テーブルを作成します。行指向テーブルは、以下のような操作に最適化されています。
INSERT によるリアルタイム書き込み
頻繁な UPDATE および DELETE 操作
B ツリーインデックスを使用したポイントクエリ
ヒープテーブル (デフォルト)
CREATE TABLE foo (a int, b text) DISTRIBUTED BY (a);追記型行指向 (AORO) テーブル
CREATE TABLE bar (a int, b text)
WITH (appendonly=true, orientation=row)
DISTRIBUTED BY (a);DTS を使用して AnalyticDB for PostgreSQL にデータを書き込む場合、宛先テーブルは行指向である必要があります。DTS は、INSERT、UPDATE、DELETE 操作のほぼリアルタイムの同期をサポートしています。
列指向テーブル
列指向テーブルは、データを列ごとに格納し、クエリで参照される列のみを読み取ります。これにより、データウェアハウスワークロード、特に次のような少数の列を集計するクエリに適しています。
SELECT SUM(revenue), AVG(cost) FROM orders WHERE region = 'us';列指向テーブルは、行指向テーブルの 3~5 倍の圧縮率を提供します。頻繁な行レベルの挿入や更新には効率が劣るため、最高のパフォーマンスを得るには COPY のようなバッチロード方式を使用してください。
列指向テーブルは追記型である必要があります。作成時に appendonly=true を設定してください。
CREATE TABLE bar (a int, b text)
WITH (appendonly=true, orientation=column)
DISTRIBUTED BY (a);行列混在ストレージテーブル
ハイブリッド行列表ストレージは、AnalyticDB for PostgreSQL V7.0 インスタンスでのみサポートされています。
ハイブリッド行列表ストレージモデルは、2 つの内部ストレージレイヤーを組み合わせた Beam ストレージエンジンを使用します。
Delta ストレージ (行指向):
INSERT INTO ... VALUESによるリアルタイムストリーミング書き込みを処理します。行指向テーブルに匹敵する書き込みパフォーマンスを提供します。Base ストレージ (PAX ベース、列指向):
COPYまたはINSERT INTO ... SELECTによるバッチ書き込みを処理します。バルクデータに対してより高いスループットを提供します。
Beam は、書き込みメソッドに基づいて、受信データを適切なレイヤーに自動的にルーティングします。
非パーティションテーブル
beam ストレージエンジンでテーブルを作成
CREATE TABLE testtable (a int) USING beam;既存のテーブルを beam ストレージエンジンを使用するように変更
ALTER TABLE testtable SET ACCESS METHOD beam;パーティションテーブル
以下の例では、ヒープストレージで作成されたベースパーティションテーブルを使用します。
CREATE TABLE am_partitioned(x INT, y INT)
PARTITION BY HASH (x) USING heap;パーティション作成時のストレージモデルの指定
追記型列指向 (AOCO) ストレージでパーティションを作成します。
CREATE TABLE am_partitioned_1 PARTITION OF am_partitioned
FOR VALUES WITH (MODULUS 3, REMAINDER 0) USING ao_column;ハイブリッド行列表 (beam) ストレージでパーティションを作成します。
CREATE TABLE amm_partitioned_2 PARTITION OF amm_partitioned
FOR VALUES WITH (MODULUS 3, REMAINDER 1) USING beam;既存のパーティションのストレージモデルの変更
ALTER TABLE am_partitioned_1 SET ACCESS METHOD ao_row;データ圧縮
圧縮は、列指向テーブルおよび追記型行指向 (AORO) テーブル (appendonly=true) で利用できます。2 つのレベルの圧縮がサポートされています。
テーブルレベルの圧縮:テーブル全体に単一のアルゴリズムを適用します
列レベルの圧縮:各列に固有の圧縮アルゴリズムを適用します
バージョン別のサポートされるアルゴリズム
アルゴリズム | V4.3 | V6.0 | V7.0 | 注 |
| いいえ | はい | はい | |
| はい | はい | いいえ | |
| いいえ | はい | はい | |
| はい | はい | いいえ | 列指向テーブルのみ |
| はい | はい | はい | 圧縮なし |
| はい | はい | はい | V7.0 のデフォルト。データ属性に基づいてアルゴリズムを選択します |
QuickLZ アルゴリズムを指定した場合、自動的に zlib に置き換えられます。rle_type アルゴリズムは列指向テーブルにのみ適用されます。
例
デフォルトの圧縮設定で列指向テーブルを作成します。
CREATE TABLE am_testtable(x INT, y INT)
WITH (orientation=column);圧縮レベル 5 の zlib 圧縮を使用して列指向テーブルを作成します。
CREATE TABLE foo (a int, b text)
WITH (appendonly=true, orientation=column, compresstype=zlib, compresslevel=5);圧縮レベル 9 の zstd 圧縮を使用して列指向テーブルを作成します。
CREATE TABLE foo (a int, b text)
WITH (appendonly=true, orientation=column, compresstype=zstd, compresslevel=9);