レベルドコンパクション戦略 (LCS)
統一コンパクション戦略 (UCS) は、Cassandra 5.0 以降のほとんどのワークロードに推奨されるコンパクション戦略です。新しいテーブルを作成する場合は、この戦略を使用してください。 |
LeveledCompactionStrategy (LCS)
は、読み取りが多いワークロードに推奨されますが、今日のすべてのワークロードに最適な推奨事項は UCS です。STCS の読み取り操作に関するいくつかの問題を軽減し、妥当な書き込み操作を提供します。この戦略は、各レベルに SSTable のセットが含まれる一連のレベルで機能します。メモリテーブルのデータがフラッシュされると、SSTable は最初のレベル (L0) に書き込まれます。ここでの SSTable は重複しないことが保証されていません。LCS コンパクションは、これらの最初の SSTable をレベル L1 のより大きな SSTable とマージします。各レベルは、デフォルトで前のレベルの 10 倍のサイズです。SSTable が L1 以上に書き込まれると、その SSTable は同じレベルの他の SSTable と重複しないことが保証されます。読み取り操作で行にアクセスする必要がある場合、レベルごとに 1 つの SSTable のみを確認する必要があります。
コンパクションを実行するために、重複するすべての SSTable が次のレベルの新しい SSTable にマージされます。L0 → L1 コンパクションの場合、ほとんどの L0 SSTable がパーティションの全範囲をカバーするため、ほぼ常にすべての L1 SSTable を含める必要があります。LCS は、1 つのレベルから次のレベルに SSTable をコンパクションし、定義された SSTable サイズに合うようにパーティションを書き込みます。さらに、各レベルには規定のサイズがあるため、レベルがサイズ制限に達するとコンパクションがトリガーされます。あるレベルで新しい SSTable を作成すると、次のレベルでコンパクションがトリガーされる可能性があり、設定に基づいてすべてのレベルがコンパクションされるまで続きます。
L0 レベルで過剰な SSTable 読み取りが行われている場合は、フェールセーフがあります。L0 に 32 個を超える SSTable がある場合、STCS コンパクションが L0 でトリガーされます。このコンパクションは、SSTable を L0 からすばやくマージし、重複しない SSTable にコンパクションされる L1 に移動します。
LCS は、STCS ほどディスクを消費せず、実行に必要なディスク容量は約 10% にすぎませんが、より IO および CPU を集中的に使用します。読み取りが多いワークロードでの継続的なマイナーコンパクションの場合、コンパクションの量は妥当です。ただし、書き込みが多いワークロードには適していません。大量のディスク IO と CPU 使用量が発生するからです。メジャーコンパクションは LCS には推奨されません。
ブートストラップ
ブートストラップ中、SSTable は他のノードからストリーミングされます。多くの SSTable は、メモリテーブルへの新しい書き込みからフラッシュされるだけでなく、リモートノートからストリーミングされるため、新しいノードには L0 に多くの SSTable が含まれることになります。フラッシュとストリーミングの SSTable の衝突を避けるために、ブートストラップが完了するまで L0 で STCS のみが実行されます。
スターブした sstable
レベリングが最適でない場合、LCS はスターブした sstable で終わる可能性があります。下位レベルの SSTable がマージおよびコンパクションされないため、上位レベルの SSTable が立ち往生し、コンパクションされない可能性があります。たとえば、この状況では、下位レベルでトンボ石を削除することが不可能になる可能性があります。これらのスターブした SSTable が定義された数のコンパクションラウンド内で解決されない場合、他のコンパクションに含まれます。この状況は通常、ユーザーが sstable_size
設定を下げた場合に発生します。
|
LCS オプション
サブプロパティ | 説明 |
---|---|
enabled |
バックグラウンドコンパクションを有効にします。デフォルト値: true |
tombstone_compaction_interval |
SSTable が作成されてから Cassandra がトンボ石コンパクションの対象として SSTable を考慮するまでの最小秒数。テーブルが |
tombstone_threshold |
すべての含まれる列に対するガベージコレクション可能なトンボ石の比率。比率がこの制限を超えると、Cassandra はそのテーブル単独でコンパクションを開始し、トンボ石を削除します。デフォルト値: 0.2 |
unchecked_tombstone_compaction |
|
log_all |
クラスター全体の高度なロギングをアクティブにします。デフォルト値: false |
sstable_size_in_mb |
SSTable のターゲットサイズ。SSTable サイズは sstable_size_in_mb 以下にする必要がありますが、コンパクション中にコンパクションによってより大きな SSTable が生成される可能性があります。これは、特定のパーティションキーのデータが非常に大きい場合に発生します。Cassandra データベースは、データを 2 つの SSTable に分割しません。デフォルト: 160 |
fanout_size |
レベルのターゲットサイズは、この |
single_sstable_uplevel |
??? デフォルト: true |
LCS は、起動オプション -Dcassandra.disable_stcs_in_l0=true
もサポートしており、これにより L0 で STCS が無効になります。