この記事では、主にダンプの実装原理について説明します。
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の数が増え続けると、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種類の方式をサポートしています。