このセクションでは、ダンプの実装原理について説明します。
OceanBaseデータベースのストレージエンジンはLSM-Treeアーキテクチャを採用しており、データは大まかにMemTableとSSTableの2つの部分に分かれています。SSTableはさらに、Mini SSTable、Minor SSTable、Major SSTableの3種類に細分化されます。
ダンプには、Mini CompactionとMinor Compactionの2つのプロセスが含まれます。MemTableのメモリ使用量が一定のしきい値に達すると、MemTable内のデータをディスク上のMini SSTableに格納し、メモリ空きを確保する必要があります。このプロセスをMini Compactionと呼びます。ユーザーデータの書き込みに伴い、Mini SSTableの数が増え続けると、その数が一定のしきい値を超えた場合、バックグラウンドで自動的にMinor Compactionがトリガーされます。ダンプを実行する前に、対象となるMemTableへの新規データ書き込みを一時的に停止する必要があります。このプロセスをフリーズ(Minor Freeze)と呼び、フリーズは現在アクティブなMemTableへの新規書き込みを阻止すると同時に、新しいアクティブMemTableを生成します。
SSTableの階層化戦略
OceanBaseデータベースでは、ダンプの実装過程においてSSTableの階層化戦略を導入し、既存の構造にL0層を追加しています。
L0層(Mini SSTable)
フリーズされたMemTableは直接Mini SSTableにフラッシュされます。OceanBaseデータベース内部では複数のMini SSTableが同時に存在可能です。
L1層(Minor SSTable)
ほとんどの場合、1つのMinor SSTableしか存在しません。
L0層の複数のMini SSTableと既存のMinor SSTableがL1層で結合し、新しいMinor SSTableを生成します。
L2層(Major SSTable)
ベースラインデータで、マージ処理中に生成されます。通常は1つだけ存在します。
SSTableの階層化戦略の内部実装原理は以下の図に示されています。

ダンプのトリガー方法
ダンプは、自動トリガーと手動トリガーの2つの方法をサポートしています。