AnalyticDB for PostgreSQL は、行指向ストレージ、列指向ストレージ、ハイブリッド行-列ストレージの 3 つのテーブルストレージモデルをサポートしています。テーブルを作成する際に、ビジネス要件に基づいて適切なストレージモデルを選択できます。行指向ストレージは、データ更新が頻繁に行われる場合や、INSERT 文を実行してリアルタイムで書き込みを行う場合に適しています。列指向ストレージは、少数の列のデータクエリや集計など、データウェアハウスのシナリオに適しています。
テーブルのストレージモデルを指定する
行指向テーブルまたは列指向テーブルを定義する場合、CREATE TABLE 文の WITH 句でストレージモデルを指定できます。WITH 句では、圧縮アルゴリズムと圧縮レベルも指定できます。次の表にパラメーターを示します。
パラメーター | 説明 | 有効な値 |
orientation | テーブルのストレージモデル。有効な値: 説明
|
|
compresstype | テーブルの圧縮アルゴリズム。 AnalyticDB for PostgreSQL V4.3 および V6.0 のデフォルト値: AnalyticDB for PostgreSQL V7.0 のデフォルト値: |
|
compresslevel | テーブルの圧縮レベル。値が大きいほど圧縮率は高くなりますが、圧縮速度は低下します。デフォルト値: 1。 | 1 ~ 9。値は整数である必要があります。 |
appendonly | 追加最適化ストレージを有効にするかどうかを指定します。デフォルト値: |
|
行指向テーブル
デフォルトでは、AnalyticDB for PostgreSQL は PostgreSQL のヒープストレージモデルを使用して行指向テーブルを作成します。行指向テーブルは、高い頻度で更新する必要があるデータ、または INSERT 文を実行してリアルタイムで書き込むデータに使用されます。B ツリーインデックスを持つ行指向テーブルは、ポイントクエリを実行する際に高いデータ検索パフォーマンスを提供します。
例
ヒープストレージモデルを使用する行指向テーブルを作成します。
CREATE TABLE foo (a int, b text) DISTRIBUTED BY (a);説明Data Transmission Service (DTS) を使用して AnalyticDB for PostgreSQL インスタンスにデータを書き込む場合、宛先テーブルは行指向テーブルである必要があります。AnalyticDB for PostgreSQL DTS では、ほぼリアルタイムのデータ同期が可能です。INSERT 文で挿入されたデータに加えて、DTS は UPDATE や DELETE などの SQL 文で更新されたデータを同期できます。
orientationパラメーターと appendonly パラメーターを使用して、追加最適化行指向 (AORO) テーブルを作成します。CREATE TABLE bar (a int, b text) WITH (appendonly=true, orientation=row) DISTRIBUTED BY (a);
列指向テーブル
列指向テーブルは、データを列ごとに格納します。データにアクセスするとき、関連する列のみが読み取られます。列指向テーブルは、少数の列のデータクエリや集計など、データウェアハウスのシナリオに適しています。これらのシナリオでは、列指向テーブルは高い I/O パフォーマンスを提供します。ただし、列指向テーブルは、データが頻繁に挿入または更新されるシナリオでは効率が低下します。COPY 文などのバッチロード方法を使用して、列指向テーブルにデータを挿入することをお勧めします。列指向テーブルは、行指向テーブルの 3 ~ 5 倍のデータ圧縮率を提供します。
例
列指向テーブルは追加最適化テーブルである必要があります。列指向テーブルを作成するには、appendonly パラメーターを true に設定する必要があります。
CREATE TABLE bar (a int, b text)
WITH (appendonly=true, orientation=column)
DISTRIBUTED BY (a);ハイブリッド行-列ストレージテーブル
AnalyticDB for PostgreSQL V7.0 インスタンスのみがハイブリッド行-列ストレージテーブルをサポートしています。
パーティションテーブルと非パーティションテーブルは、ハイブリッド行-列ストレージをサポートしています。
非パーティションテーブル
ハイブリッド行-列ストレージを実現するには、非パーティションテーブルのストレージエンジンを beam に設定します。
Beam ストレージエンジンは、行指向の Delta ストレージと PAX ベースの列指向の Base ストレージで構成されています。データが書き込まれるとき、データ書き込み方法に基づいて適切なストレージモデルが選択されます。INSERT INTO VALUES 文などのリアルタイムストリーミング書き込み方法を使用する場合、データは行指向の Delta ストレージに書き込まれ、行指向テーブルに匹敵するリアルタイム書き込みパフォーマンスを実現します。COPY 文または INSERT INTO SELECT 文などのバッチ処理方法を使用する場合、データは列指向の Base ストレージに書き込まれ、より高いスループットと書き込みパフォーマンスを実現します。
テーブルを作成するときにストレージエンジンを beam に設定する
CREATE TABLE testtable (a int) USING beam;既存のテーブルのストレージエンジンを beam に変更する
ALTER TABLE testtable SET ACCESS METHOD beam;パーティションテーブル
次の例は、ハイブリッド行-列ストレージテーブルを構成する方法を示しています。これらの例では、am_partitioned テーブルが使用されます。
CREATE TABLE am_partitioned(x INT, y INT)
PARTITION BY HASH (x) USING heap;パーティションを作成するときにパーティションのストレージモデルを指定する
am_partitioned_1 パーティションのストレージモデルを追加最適化列指向 (AOCO) ストレージに設定します。
CREATE TABLE am_partitioned_1 PARTITION OF am_partitioned FOR VALUES WITH (MODULUS 3,REMAINDER 0) USING ao_column;作成後、am_partitioned_2 パーティションはハイブリッド行-列ストレージモデルになります。
CREATE TABLE amm_partitioned_2 PARTITION OF amm_partitioned FOR VALUES WITH (MODULUS 3,REMAINDER 1) USING beam;
既存のパーティションのストレージモデルを変更する
am_partitioned_1 パーティションのストレージモデルを AORO ストレージに変更します。
ALTER TABLE am_partitioned_1 SET ACCESS METHOD ao_row;データ圧縮
データ圧縮は、列指向テーブル、または appendonly パラメーターが true に設定されている AORO テーブルに使用されます。2 つの圧縮タイプを使用できます。
テーブルレベルの圧縮。
列レベルの圧縮。各列に固有の圧縮アルゴリズムを適用できます。
AnalyticDB for PostgreSQL は、次の圧縮アルゴリズムをサポートしています。
V4.3: zlib、rle_type、none、および auto。
V6.0: zstd、zlib、rle_type、lz4、none、および auto。
V7.0: zstd、lz4、none、および auto。
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);