Cassandra ドキュメント

バージョン

プレリリースバージョンのドキュメントを表示しています。

Time Window Compaction Strategy (TWCS)

Unified Compaction Strategy (UCS) は、Cassandra 5.0 以降のほとんどのワークロードに推奨されるコンパクション戦略です。新しいテーブルを作成する場合は、この戦略を使用してください。

TimeWindowCompactionStrategy (TWCS) は、タイムシリーズおよび Time-To-Live (TTL) ワークロードの期限切れに推奨されるコンパクション戦略です。ワークロードにタイムスタンプでグループ化されたデータがある場合、TWCS を使用して SSTable をタイムウィンドウでグループ化し、期限切れになったときに SSTable 全体を削除できます。したがって、STCS または LCS を使用する場合よりも、ディスクスペースをより確実に再利用できます。

TWCS は、一連のタイムウィンドウバケットを使用して SSTable をコンパクションします。アクティブなタイムウィンドウ中、TWCS はメモリからフラッシュされたすべての SSTable を STCS を使用してより大きな SSTable にコンパクションします。時間期間の終了時、これらのすべての SSTable は、SSTable の最大タイムスタンプに基づいて単一の SSTable にコンパクションされます。タイムウィンドウのメジャーコンパクションが完了すると、そのデータのコンパクションは二度と発生しません。プロセスは、次のタイムウィンドウに書き込まれた SSTable でやり直されます。各 TWCS タイムウィンドウには、さまざまな量のデータが含まれていることに注意してください。次に、次のタイムウィンドウが開始され、プロセスが繰り返されます。

TimeWindowCompactionStrategy の運用上の考慮事項

TWCS の主な動機は、ディスク上のデータをタイムスタンプで分離し、完全に期限切れになった SSTable をより効率的に削除できるようにすることです。この最適な動作を妨げる可能性のある 1 つの方法は、データが順不同で SSTable に書き込まれ、同じ SSTable に新しいデータと古いデータが混在している場合です。

順不同のデータは 2 つの方法で発生する可能性があります。

  • ユーザーが従来の書き込みパスで古いデータと新しいデータを混合すると、データは memtable 内で混ざり合い、同じ SSTable にフラッシュされ、そこで混ざり合ったままになります。

  • ユーザーの古いデータの読み取り要求によって、古いデータが現在の memtable にプルされる読み取り修復が発生した場合、そのデータは混ざり合い、同じ SSTable にフラッシュされます。

TWCS は混ざり合ったデータの影響を最小限に抑えようとしますが、ユーザーはこの動作を避けるようにしてください。特に、ユーザーは CQL USING TIMESTAMP を介してタイムスタンプを明示的に設定するクエリを避ける必要があります。さらに、ユーザーは頻繁な修復を実行する必要があります (混ざり合わないようにデータをストリーミングします)。

SizeTieredCompactionStrategy は、デフォルトのコンパクション戦略です。他のコンパクション戦略は、cassandra.yaml ファイルで定義する必要があります。

TWCS オプション

サブプロパティ 説明

enabled

バックグラウンドコンパクションを有効にします。デフォルト値: true

tombstone_compaction_interval

SSTable が作成されてから、Cassandra が SSTable をトンブストーンコンパクションの対象と見なすまでの最小秒数。テーブルが tombstone_threshold 比率を超えている場合、SSTable はトンブストーンコンパクションの対象となります。デフォルト値: 86400

tombstone_threshold

ガベージコレクション可能なトンブストーンと含まれるすべての列の比率。比率がこの制限を超えると、Cassandra はトンブストーンをパージするために、そのテーブルだけでコンパクションを開始します。デフォルト値: 0.2

unchecked_tombstone_compaction

true に設定すると、Cassandra は、どのテーブルがこの操作の対象となるかを事前に確認することなく、トンブストーンコンパクションを実行できます。この事前確認がなくても、Cassandra は SSTable をチェックして、トンブストーンを安全に削除できることを確認します。デフォルト値: false

log_all

クラスター全体の詳細ログをアクティブにします。デフォルト値: false

compaction_window_unit

バケットサイズの定義に使用する時間単位。値は Java TimeUnit に基づいています。有効な値のリストについては、docs.oracle.com/javase/8/docs/api/java/util/concurrent/TimeUnit.html にある Java API TimeUnit ページを参照してください。デフォルト: days

compaction_window_size

バケットあたりの単位。デフォルト値: 1

timestamp_resolution

データの挿入時に使用されるタイムスタンプ分解能。MILLISECONDS、MICROSECONDS などを使用できます (Java TimeUnit で理解できる必要があります)。USING TIMESTAMP (またはクライアントで直接同等のもの) を使用して変更しない限り、この値を変更しないでください。デフォルト: microseconds

expired_sstable_check_frequency_seconds

期限切れになった SSTable をチェックする頻度を決定します。デフォルト: 10 分

unsafe_aggressive_sstable_expiration

期限切れになった SSTable は、データが他の SSTable をシャドウイングしているかどうかを確認せずに削除されます。これは、データ損失や削除されたデータの再出現につながる可能性のある危険なオプションであり、unchecked_tombstone_compaction が単一の SSTable コンパクションに対して行うことを超えています。リスクがあるため、JVM もオプション -Dcassandra unsafe_aggressive_sstable_expiration=true で起動する必要があります。デフォルト: false

まとめて、オペレーターは事実上あらゆるサイズのウィンドウを指定でき、TWCS はそのウィンドウ内の書き込みに対して単一の SSTable を作成するよう動作します。書き込み中の効率のために、最新のウィンドウは STCS を使用してコンパクションされます。

理想的には、オペレーターは、約 20 ~ 30 個のウィンドウを生成する compaction_window_unitcompaction_window_size のペアを選択する必要があります。たとえば、90 日の TTL で書き込む場合、3 日間のウィンドウは妥当な選択であり、オプションを 'compaction_window_unit':'DAYS' および 'compaction_window_size':3 に設定します。

TimeWindowCompactionStrategy オプションの変更

既存のデータで TWCS を有効にしたいオペレーターは、最初にメジャーコンパクションを実行して、既存のすべてのデータを単一の (古い) ウィンドウに配置することを検討する必要があります。後続の新しい書き込みは、予想どおりに通常の SSTable を作成します。

compaction_window_unit または compaction_window_size を変更したいオペレーターは、変更できますが、隣接するウィンドウが結合されると追加のコンパクションがトリガーされる可能性があります。ウィンドウサイズが小さくなった場合 (たとえば、24 時間から 12 時間に変更した場合)、既存の SSTable は変更されません。TWCS は、既存の SSTable を複数のウィンドウに分割できません。