Cassandra 5 の統一圧縮戦略(UCS)とその技術的特徴

はじめに

Cassandra は、分散データベースとして高い可用性とスケーラビリティを実現するために、LSM(Log-Structured Merge-Tree)ツリー構造を採用しています。この構造は、高速な書き込みを可能にしつつ、読み込み性能を維持するための圧縮(compaction)戦略の設計に不可欠です。Cassandra 5 では、従來の Size-Tiered Compaction と Leveled Compaction の長所を統合した「統一圧縮戦略(Unified Compaction Strategy: UCS)」が導入され、読込・書込の拡大(read/write amplification)をバランスよく制御する新たなアプローチが実現されました。本記事では、UCS の設計思想、技術的実裝、および実際の応用例を解説します。

技術の定義と基本概念

LSM ツリーと圧縮の役割

Cassandra は、データを SSTable(Sorted String Table)という構造に格納し、LSM ツリーを基盤としてデータの管理を行います。書き込みは高速ですが、時間とともに多數の SSTable が生成され、読み込み性能が低下する可能性があります。このため、圧縮は SSTable を再構成し、データの整合性とアクセス効率を維持する重要なプロセスです。

統一圧縮戦略(UCS)の概要

UCS は、Size-Tiered と Leveled Compaction の特性を統合し、読込・書込の拡大をバランスよく制御する戦略です。SSTable のサイズやトークン空間の密度、重なり具合を基に、動的な分片戦略を採用し、圧縮の粒度を柔軟に調整します。この戦略により、大規模なデータセットでも高いパフォーマンスを維持することが可能になります。

重要な特性や機能

1. 読込・書込拡大のバランス制御

UCS は、読込と書込の拡大を適切に調整するため、fun factor という単一のパラメータで戦略を柔軟に変更可能です。負の値を設定すると読込に最適化され、正の値を設定すると書込に最適化されます。このように、ワークロードに応じた最適なパフォーマンスが達成されます。

2. SSTable のサイズ管理

UCS は、SSTable のサイズを制御し、過大な SSTable の生成を防ぐため、密度(density)と重なり(overlap)を基準に圧縮を実行します。これにより、圧縮後の SSTable のサイズが適切に維持され、修復やノード再起動時のパフォーマンス低下を抑えることができます。

3. 動的な分片戦略

UCS は、データのサイズと目標 SSTable のサイズに基づき、分片數を動的に調整します。たとえば、総サイズが 400MB で目標 SSTable が 100MB の場合、4 個の SSTable に分片されます。この戦略により、データの密度を維持しながら、圧縮の効率を向上させます。

実際の応用例や実裝手順

壓縮プロセスの例

  1. 初期狀態:Level 0 に 4 個の SSTable(総サイズ 400MB)が存在し、トークン空間を完全にカバーしています。fun factor=4 により、圧縮がトリガーされ、4 個の 100MB の SSTable に分割されます。

  2. 後続データの処理:新たに 4 個の 60MB の SSTable が追加され、総サイズが 240MB になります。fun factor=4 により、2 個の 120MB の SSTable に分割され、半數のトークン空間をカバーします。

  3. 高層級圧縮: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 を調整し、最適な設定を行うことが重要です。今後の進化では、時間基準層級や自動化調整機能の導入が期待されています。