DS201: Foundations of Apache Cassandra™ and DataStax Enterprise の学習記録です。
Compaction (コンパクション)
Cassandraは、高い書き込み性能を実現するために、書き込み時に既存のデータを直接上書きせず、新しいデータをSSTable(Sorted String Table)としてディスクに追記します。このため、同じキーのデータが複数のSSTableに分散して存在したり、削除されたデータが物理的にディスクから消えずに残ったりします。
**Compaction(コンパクション)**は、これらのSSTableを統合し、不要なデータを削除し、データの配置を最適化することで、データベースのパフォーマンスを向上させ、ディスクスペースを効率的に利用するためのプロセスです。
Compactionの主な目的
- データの重複排除: 同じキーの最新バージョン以外の古いデータを削除します。
- 削除されたデータの物理的な削除: 「Tombstone(トゥームストーン)」と呼ばれる削除マーカーが付与されたデータを物理的に削除します。
- SSTableの統合: 多数の小さなSSTableをより少ない大きなSSTableに統合し、読み込み性能を向上させます。
- ディスクスペースの解放: 不要なデータを削除することで、ディスクスペースを解放します。
Tombstone (トゥームストーン) について
Cassandraでは、データの削除操作が行われた場合、データが即座に物理的に削除されるわけではありません。代わりに、そのデータが「削除済み」であることを示す**Tombstone(トゥームストーン)**と呼ばれるマーカーがSSTableに書き込まれます。このTombstoneは、コンパクションプロセス中に処理され、一定期間(gc_grace_seconds
で設定)が経過した後に、関連するデータとともに物理的に削除されます。
Compactionの種類
Cassandraには、いくつかのコンパクション戦略がありますが、ここでは一般的な概念として「マイナーコンパクション」と「メジャーコンパクション」に分けて説明します。
マイナーコンパクション (Minor Compaction)
マイナーコンパクションは、主にMemtableがSSTableにフラッシュされた後や、特定の条件(例: サイズベース)で自動的に実行されます。
- 対象: 比較的新しいSSTableや、特定のコンパクション戦略で選択されたSSTable。
- 処理: 選択されたSSTableを統合し、重複するデータやTombstoneを処理します。これにより、読み込み時のSSTable検索数を減らし、ディスクスペースを最適化します。
メジャーコンパクション (Major Compaction)
メジャーコンパクションは、クラスター内のすべてのSSTableを統合する大規模なコンパクションです。
- 対象: クラスター内のすべてのSSTable。
- 処理: 複数のSSTableを1つの新しいSSTableに結合し、データの重複を完全に排除し、すべてのTombstoneを物理的に削除します。これにより、ディスクスペースが大幅に解放され、読み込み性能が最適化されます。
- 影響: 大規模なディスクI/OとCPUリソースを消費するため、システムの負荷が高くなります。そのため、通常はバックグラウンドで自動的にスケジュールされるか、メンテナンスウィンドウ中に手動で実行されます。
Cassandraは、様々なコンパクション戦略(例: SizeTieredCompactionStrategy, LeveledCompactionStrategy, TimeWindowCompactionStrategy)を提供しており、ワークロードの特性に合わせて最適な戦略を選択することが重要です。