カラムストアでは列の追加・削除は可能ですか?
列の追加と削除は可能です。
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が存在しないことを心配する必要はありません。すべての列は DEFAULTL COLUMN GROUP というデフォルトのGroupに配置されます。
カラムストアでは複数の列をまとめて保存することは可能ですか?
OceanBaseデータベースV4.3.0バージョンでは、各列は独立して保存されるか、すべての列をまとめて行として保存するかのいずれか一方のみ をサポートしています。現在、任意の数の列を選択してまとめて保存する機能はサポートされていません。
カラムストアは更新をサポートしますか?また、MemTable内の構造はどのようになっていますか?
OceanBaseデータベースでは、追加、削除、変更の各操作はすべてメモリ内で完了し、データはMemTableに行ストア形式で保存されます。一方、ベースラインデータは読み取り専用であり、ディスク上にカラムストア形式で保存されます。1列のデータを読み取る際、MemTableの行ストアデータとディスク上のカラムストアデータがリアルタイムで統合され、ユーザーに出力されます。これにより、OceanBaseデータベースは強整合性の読み取りをサポートしており、データの遅延は発生しません。MemTableに書き込まれたデータはダンプをサポートしており、ダンプデータも引き続き行ストア形式で保存されます。メジャーコンパクション後、行ストアデータとベースラインカラムストアデータが統合され、新しいベースラインカラムストアデータが形成されます。
注意
カラムストアテーブルにおいて、大量の更新操作が発生し、適時にメジャーコンパクションが行われない場合、クエリ性能に影響が出ます。そのため、データの一括インポート後に一度メジャーコンパクションを実行し、最適なクエリ性能を得ることを推奨します。少数の更新操作は性能への影響が大きくありません。
カラムストアの特定の列にインデックスを作成できますか?
可能です。OceanBaseデータベースでは、カラムストアにインデックスを作成する場合でも行ストアにインデックスを作成する場合でも、作成されるインデックス構造は同じです。
カラムストアの1列または複数列にインデックスを作成する意義は、カバリングインデックスを構築してポイントクエリの性能を向上させたり、特定の列をソートしてソート性能を向上させたりすることができる点にあります。
「カラムストアインデックス」とは何ですか?
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句を使用する目的は、インデックスに追加の非インデックス列データを格納することです。これにより、特定のクエリの性能を最適化でき、テーブルへの再アクセスを回避したり、インデックスソートのコストを削減したりできます。クエリがインデックスに格納された列のみにアクセスする必要があり、元の行をテーブルから照会する必要がない場合、クエリ効率を大幅に向上させることができます。
カラムストアテーブルとカラムストアレプリカの違いは何ですか?
カラムストアテーブルとは、テーブルのパーティションLeaderおよびFollowerの両方のスキーマがカラムストア形式であり、OLAPクエリが強い整合性読み取りをサポートすることを指します。一方、カラムストアレプリカとは、テーブルのパーティションLeaderおよびFollowerのスキーマが行ストア形式であることを保証しつつ、読み取り専用レプリカLearnerをカラムストア形式にし、OLAPクエリが弱い整合性読み取りのみをサポートすることを指します。