カラムストアでは列の追加や削除は可能ですか?
列の追加と削除が可能です。
VARCHAR型の列の文字数を増減することができます。
カラムストアは複数のオフラインDDLをサポートしており、行指向テーブルと変わりません。
カラムストアの変更に関する詳細情報については、テーブルの行指向からカラムストアへの変換(MySQLモード)およびテーブルの行指向からカラムストアへの変換(Oracleモード)を参照してください。
カラムストアテーブルのクエリにはどのような特徴がありますか?
レプリケーション行指向テーブルでは、カラムストアテーブルのクエリロジックはデフォルトでRange Scanによるカラムストアモードを採用し、Point Getクエリは行指向モードにフォールバックします。
純粋なカラムストアテーブルでは、すべてのクエリがカラムストアモードを採用します。
カラムストアはトランザクションをサポートしていますか?また、トランザクションサイズに制限はありますか?
行指向テーブルと同様に、トランザクションをサポートしており、トランザクションサイズに制限はなく、高い整合性を備えています。
カラムストアテーブルのログ同期、バックアップ・リカバリなどに特別な点はありますか?
特別な点はなく、行指向テーブルと同じです。同期されるログはすべて行指向モードです。
行指向テーブルをDDLを使用してカラムストアテーブルに変更することは可能ですか?
可能です。カラムストアの追加や行指向の削除によって実現します。関連する構文例は以下のとおりです:
create table t1( pk1 int, c2 int, primary key (pk1));
alter table t1 add column group(all columns, each column);
alter table t1 drop column group(all columns, each column);
alter table t1 add column group(each column);
alter table t1 drop column group(each column);
説明
alter table t1 drop column group(all columns, each column); を実行した後、データを保持するGroupがないことを心配する必要はありません。すべての列は DEFAULT COLUMN GROUP というデフォルトのGroupに配置されます。
カラムストアでは複数の列をまとめて格納することは可能ですか?
OceanBaseデータベースV4.3.0バージョンでは、各列を独立してストレージするか、すべての列をまとめて行指向でストレージするかのいずれか一方のみ をサポートしています。現時点では、任意のいくつかの列を選択してまとめてストレージする機能はサポートされていません。
カラムストアは更新をサポートしていますか?また、MemTable内の構造はどのようになっていますか?
OceanBaseデータベースでは、追加、削除、変更の操作はすべてメモリ内で完了し、データはMemTableに行指向形式で保存されます。一方、ベースラインデータは読み取り専用であり、ディスク上にカラムストア形式で保存されます。ある列のデータを読み取る際には、MemTable内の行指向データとディスク上のカラムストアデータをリアルタイムで統合し、ユーザーに出力します。これにより、OceanBaseデータベースは強い整合性を持つカラムストア読み取りをサポートしており、データの遅延は発生しません。MemTableに書き込まれたデータはダンプをサポートしており、ダンプされたデータも依然として行指向形式で保存されます。コンパクション後、行指向データとベースラインカラムストアデータが統合され、新しいベースラインカラムストアデータが形成されます。
注意
カラムストアテーブルに大量の更新操作が存在し、適時にコンパクションが行われない場合、クエリ性能に影響が出ます。そのため、最適なクエリ性能を得るために、一括インポート後に一度コンパクション操作を実行することを推奨します。少数の更新操作は性能への影響が小さいため、特に問題ありません。
カラムストアの特定の列にインデックスを作成することは可能ですか?
可能です。OceanBaseデータベースでは、カラムストアにインデックスを作成する場合でも行指向にインデックスを作成する場合でも、作成されるインデックス構造は同じです。
カラムストアの特定の列または複数の列にインデックスを作成する意義は、カバリングインデックスを構築してポイントルックアップクエリの性能を向上させること、または特定の列をソートしてソート性能を向上させることにあります。
「カラムストアインデックス」とは何ですか?
OceanBaseデータベースは、「カラムストアに対するインデックス作成」とは異なる、カラムストアインデックスという概念もサポートしています。カラムストアインデックスとは、インデックステーブルの構造がカラムストア形式であることを指します。
例えば、既に行ストアテーブル t6 を持っており、c3 の合計を求めたい場合、パフォーマンスが最も良いように、c3 にカラムストアインデックスを作成できます:
create table t6(
c1 TINYINT,
c2 SMALLINT,
c3 MEDIUMINT
);
create /*+ parallel(2) */ index idx1 on t6(c3) with column group (each column);
さらに、他のインデックス作成方法もサポートしています:
インデックス内の冗長行ストアをサポートします。
create index idx1 on t1(c2) storing(c1) with column group(all columns, each column); alter table t1 add index idx1 (c2) storing(c1) with column group(all columns, each column);インデックス内の純粋なカラムストアをサポートします。
create index idx1 on t1(c2) storing(c1) with column group(each column); alter table t1 add index idx1 (c2) storing(c1) with column group(each column);
データベースインデックスで STORING 句を使用する目的は、インデックスに追加の非インデックス列データを格納することです。これにより特定のクエリのパフォーマンスを最適化し、テーブルへの再アクセスを回避したり、インデックスソートのコストを低減したりできます。クエリがインデックスに格納されている列のみにアクセスし、元の行を再アクセスする必要がない場合、クエリ効率を大幅に向上させることができます。
カラムストアテーブルとカラムストアレプリカントの違いは何ですか?
カラムストアテーブルとは、テーブルのパーティションリーダーとフォロワーの両方のスキーマがカラムストア形式であり、OLAPクエリが強力な読み取りを可能にするものです。一方、カラムストアレプリカントとは、テーブルのパーティションリーダーとフォロワーの両方のスキーマが行ストア形式であることを保証しつつ、読み取り専用レプリカントの学習者のみがカラムストア形式であり、OLAPクエリは弱い整合性読み取りしかできないものです。