カラムストアでは列の追加と削除は可能ですか?
列の追加と削除は可能です。
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 クエリが弱い読み取りのみをサポートするレプリカを指します。