DS201学習記録:CassandraのCompactionについて

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)を提供しており、ワークロードの特性に合わせて最適な戦略を選択することが重要です。