OceanBaseデータベースは、ダイレクトロードと呼ばれる方法でデータを挿入することをサポートしています。これは、OceanBaseデータベースがデータファイルに直接データを書き込む機能を備えていることを意味します。ダイレクトロードはSQL層のインターフェースをバイパスし、データファイル内に直接領域を割り当ててデータを挿入するため、データインポートの効率を向上させます。
OceanBaseデータベースの従来のデータインポート方法(例:LOAD DATA、OBLOADER、OMS)はINSERTステートメントに依存しており、以下のプロセスを経由します:
SQL解析 -> トランザクション処理 -> メモリテーブル(MemTable)への書き込み -> ダンプ & マージ -> SSTable。
ボトルネック:
- CPUとメモリリソースを大量に消費する。
- 大量データのインポート時にパフォーマンスが低下する。
OceanBaseデータベースは、ダイレクトロード技術により中間ステップをスキップし、データを直接SSTableに書き込むことで、リソース消費(CPU、メモリ)を削減し、効率的な全量または増分データのインポートをサポートします。
注意
ダイレクトロードタスクの実行中にアップグレードを実行することは推奨されません。これにより、ダイレクトロードタスクが失敗する可能性があります。
技術アーキテクチャ
従来のインポートパス(青色のパス):
クライアント -> SQL解析 -> トランザクション処理 -> メモリテーブル(MemTable) -> ダンプ -> Minor/Majorマージ -> SSTable
デメリット:パスが長く、リソース消費が高く、書き込み速度が制限される。
ダイレクトロードのインポートパス(緑色のパス):
クライアント -> 型変換 -> 主キーソート(オプション) -> Major SSTable(フル)または Mini SSTable(増分)への直接書き込み
メリット:
- SQL、トランザクション、MemTableなどの中間モジュールをスキップし、リソース消費を削減する。
- データを直接ストレージ層に書き込むため、複数回のマージによるオーバーヘッドを回避する。
ダイレクトロードのコアメカニズム
中間層のスキップ:SQL解析、トランザクション、MemTableをバイパスし、SSTableに直接書き込む。
型変換とソート:
- データ型の変換(例:CSVからOceanBaseのテーブル構造へ)。
- 主キーでのソート(フルインポート時は必須。Major SSTableの順序性を保証するため)。
ストレージ層アーキテクチャとダイレクトロードのプロセス
ストレージ層の階層構造
OceanBaseデータベースのLSM-Treeストレージ層は3層に分かれています:
- MemTable:メモリ内の行ストア構造で、高並行な書き込みをサポートします。
- Mini SSTable:ディスク上の行ストア構造で、MemTableのダンプによって生成されます。
- Major SSTable:カラムストア構造で、日次マージ(Major Compaction)によって生成され、クエリ性能が最適です。
機能の概要
OceanBaseデータベースは、2種類のダイレクトロード方式をサポートしています:フルダイレクトロードと増分ダイレクトロードです。
LOAD DATAステートメント、INSERT INTO SELECTステートメント、およびCREATE TABLE AS SELECTステートメントによるデータインポート時にダイレクトロードがサポートされます。単一のインポートタスクにHintを追加してデータのインポート方式をダイレクトロードとして指定するか、グローバルパラメータdefault_load_modeでデータのインポート方式をダイレクトロードとして指定できます。
フルダイレクトロード
- フルダイレクトロードは、完全なデータセットを一度にデータベースのデータファイルに直接書き込むために使用されます。この方法はSQL層のインターフェースをバイパスし、データファイル内に直接領域を割り当ててデータを挿入することで、データインポートの効率を向上させます。
- フルダイレクトロードは通常、データベースの初期化、データ移行、または大量のデータを迅速に読み込む必要がある場合に使用されます。
増分ダイレクトロード
- 増分ダイレクトロードは、既に大量のデータが存在する状況下で、新規データをSQLインターフェースを経由せずに直接データベースのデータファイルに書き込むために使用されます。この方法はSQL層のデータ処理プロセスをバイパスし、新規データを直接データファイルに書き込むことで、データ書き込みの効率を向上させます。
- 増分ダイレクトロードは通常、大規模なリアルタイムデータ収集、ログ書き込みなどの高スループットデータ書き込みシナリオで使用されます。
フルインポートと増分インポートの比較
フルインポートの概要図:

増分インポートの概要図:

比較項目 |
フルインポート |
増分インポート |
|---|---|---|
| トリガーシナリオ | データの初期ロードまたはデータの完全上書き。 | データの追加または部分的な更新。 |
| インポートプロセス |
|
|
| 書き込み先 | Major SSTable(カラムストア) | Mini SSTable(行ストア) |
| 性能特性 | 行ごとの処理とMajor SSTableの再書き込みが必要なため、データ量が多いほどオーバーヘッドが高くなる。データの再書き込みにより、規模が大きくなるにつれて速度が低下する。
|
クエリ性能は低いが、並列インポートをサポートする。クエリ時は、日次メジャーコンパクション(Major Compaction)によってMini SSTableがカラムストアに変換されるのを待つ必要がある。
|
| ロック機構 | テーブルロック(テーブル全体が使用不可) | パーティションロック(対象パーティションのみロック) |
| クエリ性能 | カラムストアテーブルはカラムストア構造、行ストアテーブルは行ストア構造となり、クエリ性能は優れている。 | カラムストアテーブルも行ストアテーブルも行ストア構造となり、クエリ性能は低い。 |
適用シナリオ
ダイレクトロード機能は、以下のシナリオで利用できます:
データ移行と同期。データ移行や同期では、通常、大量の様々な形式のデータを異なるデータソースからOceanBaseデータベースに移行する必要があります。従来のSQLインターフェースでは、パフォーマンス面で時間的要件を満たせない場合があります。
従来のETL。データがソース側で抽出・変換された後、ターゲット側にロードする際、通常は短時間で大量のデータをロードする必要があります。ダイレクトロード技術を使用することで、データインポートのパフォーマンスが向上します。また、ETL技術においても、データロードプロセスでダイレクトロード技術を活用することで効率を高めることができます。
テキストファイルやその他のデータソースからOceanBaseデータベースにデータをロードする際、ダイレクトロード技術を利用することで、データロードの効率を向上させることができます。