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モードを使用します。

コンパクションの種類
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を作成します。このプロセスをコンパクションと呼びます。