Cassandra 文件

版本

您正在查看預發行版本的說明文件。

時間視窗壓縮策略 (TWCS)

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

TimeWindowCompactionStrategy (TWCS) 是針對時間序列和到期生存時間 (TTL) 工作負載建議的壓縮策略。如果工作負載的資料依時間戳分組,TWCS 可用於依時間視窗分組 SSTable,然後在到期時刪除整個 SSTable。因此,與使用 STCS 或 LCS 相比,可以更可靠地回收磁碟空間。

TWCS 使用一系列時間視窗區段來壓縮 SSTable。在活動時間視窗期間,TWCS 會使用 STCS 將所有從記憶體中清除的 SSTable 壓縮成較大的 SSTable。在時間週期結束時,所有這些 SSTable 會根據 SSTable 最大時間戳壓縮成單一 SSTable。完成時間視窗的主要壓縮後,將不再進一步壓縮資料。此程序會從下一個時間視窗中寫入的 SSTable 重新開始。請注意,每個 TWCS 時間視窗都包含不同數量的資料。然後,下一個時間視窗開始,此程序會重複。

TimeWindowCompactionStrategy 操作問題

TWCS 的主要動機是按時間戳記在磁碟上分隔資料,並允許完全過期的 SSTable 更有效率地刪除。一種潛在的方式是,如果資料以無序的方式寫入 SSTable,則新的資料和舊的資料會在同一個 SSTable 中,這會破壞最佳行為。

無序資料可能以兩種方式出現

  • 如果使用者在傳統寫入路徑中混合舊資料和新資料,資料將會在記憶表中混合,並刷新到同一個 SSTable 中,然後會繼續混合。

  • 如果使用者的舊資料讀取要求導致讀取修復,將舊資料拉入目前的記憶表,該資料將會混合並刷新到同一個 SSTable 中。

雖然 TWCS 嘗試將混合資料的影響降到最低,但使用者應嘗試避免這種行為。具體來說,使用者應避免透過 CQL USING TIMESTAMP 明確設定時間戳記的查詢。此外,使用者應執行頻繁的修復(以不會混合資料的方式串流資料)。

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

TWCS 選項

子屬性 說明

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

compaction_window_unit

用於定義儲存區大小的時間單位。此值基於 Java TimeUnit。有關有效值的清單,請參閱位於 docs.oracle.com/javase/8/docs/api/java/util/concurrent/TimeUnit.html 的 Java API TimeUnit 頁面。預設值:天數

compaction_window_size

每個儲存區的單位。預設值:1

timestamp_resolution

插入資料時使用的時間戳記解析度,可以是毫秒、微秒等(Java TimeUnit 應可理解)。除非您使用 TIMESTAMP 執行突變(或直接在客戶端中使用等效值),否則請勿變更此值。預設值:微秒

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_unitcompaction_window_size 的操作員可以這麼做,但可能會觸發額外的壓縮,因為相鄰的視窗會結合在一起。如果視窗大小減少(例如從 24 小時減少到 12 小時),則現有的 SSTable 將不會被修改。TWCS 無法將現有的 SSTable 分割成多個視窗。