OceanBaseデータベースのストレージエンジンはLSM-Treeアーキテクチャに基づいており、データは大まかにメモリ内のMemTableとディスク上のSSTableの2つに分かれています。ユーザーデータがMemTableに書き込まれるにつれて、MemTableはメモリのしきい値を超えるとディスク上のSSTableに変換されます。SSTableの数は増え続け、クエリでアクセスする必要があるSSTableファイルが増加し、クエリの効率が低下します。そのため、LSM-Treeの最も核心的な概念であるCompactionが導入されました。
OceanBaseデータベースでは、Tiered & LeveledのCompaction戦略を採用しており、SSTableを3層に分割しています。L0層はtieredモードを使用し、L1層とL2層はLeveledモードを使用します。

Compactionタイプ
LSM-TreeのCompaction操作は、データの再統合であり、その本質はマルチウェイマージソートです。複数のSSTableをRowkeyの昇順でソートし、最終的に1つのSSTableとして出力します。
OceanBaseデータベースでは、Compactionには以下のタイプがあります:
Mini Compaction:MemTableをMini SSTableに変換します。自動または手動でトリガーできます。
Minor Compaction:複数のMini SSTableを新しいMini SSTableに合成するか、複数のMini SSTableと1つのMinor SSTableを新しいMinor SSTableに合成します。バックグラウンドスケジューリングスレッドによってトリガーされ、手動でトリガーすることはできません。
Medium Compaction:指定されたパーティションの元のベースラインSSTable(Major SSTable)とそのパーティションのすべてのMini SSTable/Minor SSTableを統合して、新しいMajor SSTableを作成します。自動または手動でトリガーできます。
Major Compaction:テナント内のすべてのパーティションの元のベースラインSSTable(Major SSTable)とすべてのMini SSTable/Minor SSTableを統合して、新しいMajor SSTableを作成します。自動または手動でトリガーできます。
Meta Major Compaction:特殊なCompactionタイプで、指定された時点以前のデータをMeta Major SSTableに合成します。そのデータ形式はMajor SSTableと同じで、マルチバージョンデータや未コミットトランザクションデータは含まれません。バックグラウンドスケジューリングスレッドによってトリガーされ、手動でトリガーすることはできません。
ダンプとメジャーコンパクション
ダンプには2つのプロセスが含まれます:Mini CompactionとMinor Compaction。MemTableのサイズが一定のしきい値を超えると、MemTable内のデータをMini SSTableにダンプしてメモリを解放する必要があります。このプロセスをMini Compactionと呼びます。ユーザーデータの書き込みに伴い、Mini SSTableの数が増え続けます。Mini SSTableの数が一定のしきい値を超えると、バックグラウンドが自動的にMinor Compactionをトリガーします。ダンプ(Mini Compaction)により新しいMini SSTableが生成されます。ダンプ(Mini Compaction)の回数が一定のしきい値を超えるか、または毎日の業務のオフピーク時に、システムはベースラインSSTable(Major SSTable)とその後のダンプによる増分SSTable(Mini/Minor SSTable)を統合して、新しいMajor SSTableを作成します。このプロセスをメジャーコンパクションと呼びます。
ダンプの詳細については、ダンプを参照してください。
メジャーコンパクションの詳細については、メジャーコンパクションを参照してください。