OceanBaseデータベースは、ダイレクトロード(direct load)と呼ばれる高速なデータ挿入方式をサポートしています。これはSQL層を経由せず、dataファイルに直接書き込みを行うことで、データインポートの効率を大幅に向上させる仕組みです。
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)によって生成され、最もクエリ性能に優れています。
機能の概要
ダイレクトロードには、「フル・ダイレクトロード」と「増分ダイレクトロード」の2種類があります。
この機能はLOAD DATA、INSERT INTO SELECT、CREATE TABLE AS SELECTの各ステートメントで利用可能です。ロード方式は、個別のタスクにHint句を追加するか、あるいはグローバル構成パラメータdefault_load_modeで指定できます。
フルダイレクトロード
- データセット全体を一度にデータベースのデータファイルに直接ロードするための機能です。SQL層の処理を介さず、データファイルに直接領域を確保してデータを挿入することで、インポートの効率を大幅に高めます。
- フルダイレクトロードは、主にデータベースの初期化、データ移行、大量データを一括で高速に取り込む場合に使用されます。
増分ダイレクトロード
- 既存の大量データがある状態で、追加データをデータベースのデータファイルに直接ロードするための機能です。SQL層の処理をスキップし、データを直接書き込むことで、書き込み効率を向上させます。
- 増分ダイレクトロードは、主にリアルタイムデータ収集やログの蓄積など、高スループットが求められるシナリオで利用されます。
フルダイレクトロードと増分ダイレクトロードの比較
| 比較項目 | フルダイレクトロード | 増分ダイレクトロード |
|---|---|---|
| 利用シーン | データの初期ロードや、既存データの完全な上書き。 | データの追加や部分的な更新。 |
| インポートプロセス |
|
|
| 書き込み先 | Major SSTable(カラムストア) | Mini SSTable(行ストア) |
| 性能特性 | Major SSTableを1行ずつ処理して再書き込みするため、データ量が多いほどオーバーヘッドが大きくなります。データの再書き込みにより、規模の増大に伴い速度は低下します。
|
クエリ性能は低いですが、並列インポートに対応しています。クエリ実行時は、日次のメジャーコンパクション(Major Compaction)を待ってMini SSTableがカラムストアに変換される必要があります。
|
| ロックメカニズム | テーブルロック(テーブル全体が利用不可) | パーティションロック(対象パーティションのみロック) |
| クエリ性能 | カラムストアテーブルはカラムストア構造に、行ストアテーブルは行ストア構造になるため、クエリ性能は優れています。 | カラムストアテーブルと行ストアテーブルのいずれも行ストア構造で書き込まれるため、クエリ性能は劣ります。 |
適用シナリオ
ダイレクトロード機能は、以下のシナリオで使用できます:
データの移行と同期。異なるデータソースから大量かつ多様な形式のデータをOceanBaseデータベースへ移行・同期する際、従来のSQLインターフェースではパフォーマンスが追いつかず、時間的な要件を満たせないことがあります。
従来のETL処理。ETL処理において、ソース側で抽出・変換したデータをターゲット側へロードする際には、短時間での大量データ処理が求められます。ダイレクトロード技術は、このロード処理のパフォーマンスを大幅に向上させます。また、ETL処理におけるロードプロセスでも同様に効率化が可能です。
テキストファイルやその他のデータソースからOceanBaseデータベースへデータをロードする際に、ダイレクトロード技術はロード効率を大幅に高めます。