Cassandra 文件

版本

您正在檢視預發行版本的說明文件。

大小分層壓縮策略 (STCS)

統一壓縮策略 (UCS) 是從 Cassandra 5.0 開始對大多數工作負載推薦的壓縮策略。如果您要建立新表格,請使用此策略。

SizeTieredCompactionStrategy (STCS) 推薦用於寫入密集型工作負載,並且是傳統推薦的壓縮策略。如果未指定其他策略,則為預設壓縮策略。

當 Cassandra 累積一定數量的 (預設:4) 大小相似的 SSTable 時,STCS 會啟動壓縮。STCS 將這些 SSTable 合併為一個較大的 SSTable。隨著這些較大的 SSTable 累積,STCS 會將它們合併為更大的 SSTable。在任何給定時間,都會存在大小不同的多個 SSTable。

雖然 STCS 適用於壓縮寫入密集型工作負載,但它會使讀取速度變慢,因為按大小合併的程序不會按列分組資料。這個事實使得特定列的版本更有可能分散在許多 SSTable 中。此外,STCS 無法預測刪除已刪除的資料,因為其壓縮觸發器是 SSTable 大小。但是,SSTable 可能無法快速增長以定期合併和刪除舊資料。

大多數 STCS 壓縮都是次要壓縮,將幾個 SSTable 合併為一個。相反地,使用 STCS 執行主要壓縮時,壓縮期間每個資料目錄將有兩個 SSTable,一個用於修復的資料,另一個用於未修復的資料。隨著最大的 SSTable 大小增加,在 STCS 壓縮期間同時需要的新舊 SSTable 的磁碟空間量可能會超過節點上的典型磁碟空間量。此現象稱為空間放大,即 SSTable 大小增加的問題,以及超出叢集壓縮能力的問題。不建議對 STCS 進行主要壓縮。

STCS 依賴 SSTable 平均大小的計算來決定要合併哪些 SSTable。此程序稱為分組。下列選項用於計算 SSTable 將根據平均大小分組到的分組,分組程序會根據 SSTable 的大小與平均大小的差異,將 SSTable 分組為平均大小的 50% 或 150% 以上。另一種說明此計算的方式是,分組程序會將大小在 [平均大小 × 分組低] 和 [平均大小 × 分組高] 之內的 SSTable 分組。

SizeTieredCompactionStrategy 是預設的壓縮策略。任何其他壓縮策略都必須在 cassandra.yaml 檔案中定義。

STCS 選項

SizeTieredCompactionStrategy (STCS) 選項會使用表格選項針對每個表格設定。表格的 min_threshold 選項是觸發次要壓縮的主要值。次要壓縮不涉及鍵空間中的所有表格。

子屬性 說明

enabled

啟用背景壓縮。預設值:true

tombstone_compaction_interval

在 Cassandra 考慮 SSTable 進行墓碑壓縮之前,建立 SSTable 後的最小秒數。如果表格超過 tombstone_threshold 比率,則 SSTable 有資格進行墓碑壓縮。預設值:86400

tombstone_threshold

可回收垃圾墓碑與所有包含欄的比率。如果比率超過此限制,Cassandra 將僅針對該表格啟動壓縮,以清除墓碑。預設值:0.2

unchecked_tombstone_compaction

如果設定為 true,允許 Cassandra 在不預先檢查哪些表格有資格進行此操作的情況下執行墓碑壓縮。即使沒有此預先檢查,Cassandra 也會檢查 SSTable 以確保可以安全地刪除墓碑。預設值:false

log_all

啟用整個叢集的高階記錄。預設值:false

max_threshold

次要壓縮中允許的最大 SSTable 數量。預設值:32

min_threshold

觸發次要壓縮的最小 SSTable 數量。預設值:4

bucket_high

如果 SSTable 的大小小於該分組平均大小的 150%,則會將 SSTable 加入分組。例如,如果 SSTable 大小為 13 MB,而分組平均大小為 10 MB,則會將 SSTable 加入該分組,並為該分組計算新的平均大小。預設值:1.5

bucket_low

如果 SSTable 大小大於該儲存區平均大小的 50%,則會將 SSTable 加入儲存區。例如,如果 SSTable 大小為 6 MB,而儲存區平均大小為 10 MB,則會將 SSTable 加入該儲存區,並為該儲存區計算新的平均大小。預設值:0.5

min_sstable_size

小於此值的 SSTable 會分組到一個儲存區,其平均大小小於此設定。預設值:50MB

only_purge_repaired_tombstones

如果設為 true,則允許僅從已修復的 SSTable 清除墓碑。目的是防止資料在未於 gc_grace_seconds 內執行修復時復活。如果您長時間未執行修復,Cassandra 會保留所有墓碑,這可能會造成問題。預設值:false