コンパクション
LSMツリーで、複数のSSTableを少数にまとめ、上書きされた古いバージョンを捨て、トゥームストーンを物理的に削除するバックグラウンド処理。読み取り性能とディスク使用量を保つうえで欠かせない。
理由はこうだ。SSTableは不変で追記のみのため、時間が経つと同じキーの複数バージョンが多数のファイルに散らばる。コンパクションはそれらをまとめて読み、最新の値を残し、古い値とトゥームストーンを捨て、より少なく整理されたSSTableを書き出す。方式にはレベル型(RocksDB:空間増幅・読み取り増幅が小さく、書き込み増幅が大きい)、サイズ階層型(Cassandra:その逆)、ユニバーサルなどがある。このトレードオフはRUMバランス(読み取り・書き込み・空間の増幅)を直接左右する。コンパクションはI/OとCPUを食うため、タイミングと制御は調整の中心課題であり、まずいコンパクションはレイテンシのスパイクを招く。LSM系データベースが健全に保たれる仕組みの核心である。SSTableや書き込み増幅と関連が深い。