Cassandra は、分散データベースとして高い可用性とスケーラビリティを実現するために、LSM(Log-Structured Merge-Tree)ツリー構造を採用しています。この構造は、高速な書き込みを可能にしつつ、読み込み性能を維持するための圧縮(compaction)戦略の設計に不可欠です。Cassandra 5 では、従來の Size-Tiered Compaction と Leveled Compaction の長所を統合した「統一圧縮戦略(Unified Compaction Strategy: UCS)」が導入され、読込・書込の拡大(read/write amplification)をバランスよく制御する新たなアプローチが実現されました。本記事では、UCS の設計思想、技術的実裝、および実際の応用例を解説します。
Cassandra は、データを SSTable(Sorted String Table)という構造に格納し、LSM ツリーを基盤としてデータの管理を行います。書き込みは高速ですが、時間とともに多數の SSTable が生成され、読み込み性能が低下する可能性があります。このため、圧縮は SSTable を再構成し、データの整合性とアクセス効率を維持する重要なプロセスです。
UCS は、Size-Tiered と Leveled Compaction の特性を統合し、読込・書込の拡大をバランスよく制御する戦略です。SSTable のサイズやトークン空間の密度、重なり具合を基に、動的な分片戦略を採用し、圧縮の粒度を柔軟に調整します。この戦略により、大規模なデータセットでも高いパフォーマンスを維持することが可能になります。
UCS は、読込と書込の拡大を適切に調整するため、fun factor
という単一のパラメータで戦略を柔軟に変更可能です。負の値を設定すると読込に最適化され、正の値を設定すると書込に最適化されます。このように、ワークロードに応じた最適なパフォーマンスが達成されます。
UCS は、SSTable のサイズを制御し、過大な SSTable の生成を防ぐため、密度(density)と重なり(overlap)を基準に圧縮を実行します。これにより、圧縮後の SSTable のサイズが適切に維持され、修復やノード再起動時のパフォーマンス低下を抑えることができます。
UCS は、データのサイズと目標 SSTable のサイズに基づき、分片數を動的に調整します。たとえば、総サイズが 400MB で目標 SSTable が 100MB の場合、4 個の SSTable に分片されます。この戦略により、データの密度を維持しながら、圧縮の効率を向上させます。
初期狀態:Level 0 に 4 個の SSTable(総サイズ 400MB)が存在し、トークン空間を完全にカバーしています。fun factor=4
により、圧縮がトリガーされ、4 個の 100MB の SSTable に分割されます。
後続データの処理:新たに 4 個の 60MB の SSTable が追加され、総サイズが 240MB になります。fun factor=4
により、2 個の 120MB の SSTable に分割され、半數のトークン空間をカバーします。
高層級圧縮:Level 1 に 4 個の SSTable(総サイズ 430MB)が存在し、半數のトークン空間をカバーしています。fun factor=3
により、重なりを持つ SSTable(CDF、G)が識別され、8 個の Shard に分割され、最終的に 4 個の SSTable が生成されます。
fun factor の設定:負の値を設定すると読込に最適化され、正の値を設定すると書込に最適化されます。たとえば、fun factor=-2
は読込を優先し、fun factor=3
は書込を優先します。
分層構成:各層で異なる fun factor
を設定可能で、底層に T4
、上層に T3
を設定することで、柔軟な戦略調整が可能です。
読込・書込拡大のバランス:ワークロードに応じて戦略を調整可能で、パフォーマンスの最適化が実現されます。
SSTable のサイズ管理:密度と重なりを基に圧縮を実行し、過大な SSTable の生成を防ぎます。
柔軟なパラメータ調整:単一のパラメータで戦略を変更可能で、運用の手間を削減します。
大規模データセットへの適応:TB 級のデータ規模では、分片數と SSTable のサイズのバランスを取る必要があり、過剰な SSTable の生成を防ぐ必要があります。
初期設定の複雑さ:fun factor
の設定に不適切な値を指定すると、パフォーマンスの低下を招く可能性があります。
Cassandra 5 の統一圧縮戦略(UCS)は、従來の Size-Tiered と Leveled Compaction の長所を統合し、読込・書込の拡大をバランスよく制御する新たなアプローチを提供します。UCS は、SSTable のサイズ管理、動的な分片戦略、柔軟なパラメータ調整により、大規模なデータセットでも高いパフォーマンスを維持します。運用においては、ワークロードに応じて fun factor
を調整し、最適な設定を行うことが重要です。今後の進化では、時間基準層級や自動化調整機能の導入が期待されています。