我遇到了Cassandra的這個Datastax文檔。我不明白here它被提到min_threshold
爲The minimum number of SSTables that trigger a minor compaction
其中它說it Controls how many intervals of time are combined to create the next larger interval size
。那麼,如何連接壓縮間隔和SSTables的數量。另外,我不明白在DateTieredCompactionStrategy中壓縮是如何發生的。如果它完全由base_time_seconds
決定。這是否意味着最老的SSTable會一直參與壓縮,直到達到它的年齡?如何在Cassandra的DateTieredCompactionStrategy中決定壓縮內部
回答
讓我們瞭解一些事情。
數據是怎樣被存儲:
在文件卡桑德拉寫入過程數據保存在叫做SSTables。 SSTables是不可變的。 Cassandra並沒有用插入或更新來覆蓋現有的行,而是在新的SSTables中寫入了插入或更新數據的新時間戳版本。 Cassandra不會通過刪除已刪除的數據來執行刪除:相反,Cassandra會用墓碑標記它。
隨着時間的推移,Cassandra可能會在不同的SSTables中編寫多行版本的行。每個版本可能有一組唯一的存儲列和一個不同的時間戳。這種數據分佈可能需要Cassandra訪問越來越多的SSTables來檢索完整的行。
爲了保持數據庫的健康,Cassandra定期合併SSTables並丟棄舊數據。這個過程稱爲壓實。
現在我們知道爲什麼壓實會發生,讓我們看看壓實是如何發生的?
有許多壓實策略。 讓我們討論你感到困惑
1 SizeTieredCompactionStrategy(STCS)兩個 的SizeTieredCompactionStrategy(STCS)啓動時卡桑德拉積累了一整套數(默認值:4)壓實類似大小SSTables。
所以在這種情況下,min_threshold是觸發一個次要壓實類似大小的,SSTables的最小數目。所以只要你有4個相同大小的sstables,壓縮就會觸發。
2. DateTieredCompactionStrategy(DTCS) 的DateTieredCompactionStrategy(DTCS)類似於STCS。 但是,不是基於SSTable大小的壓縮,而是基於SSTable年齡爲的DTCS壓縮。
DTCS的基本思想是根據SSTable中的數據的年齡對Windows中的SSTables進行分組。然後我們只在這些窗口中進行壓縮,以確保我們不混合新舊數據。
壓實窗口的大小是可配置的。 base_time_seconds選項設置初始窗口的大小,默認爲1小時。這意味着在過去一小時內寫入的數據將位於第一個窗口中,並將與來自同一窗口的數據壓縮。任何想要從最近一小時讀取數據的讀取只需查看在該窗口中壓縮或刷新的SSTable。較舊的窗口隨後變得越來越大,最後我們有max_sstable_age_days,這是我們不再壓縮SSTables的時候。
所以在DateTieredCompactionStrategy的情況下,min_threshold仍然是4(可以通過min_threshold配置)sstable,但是您將壓縮的4個sstable會有所不同。因此,在STCS您將緊湊的4個sstables是具有相同大小的sstable。但是,在DTCS中,您將選擇具有與壓縮的SSTables的總最小/最大時間戳相同的最小/最大時間戳的那4個。
你可以閱讀更多關於它在這裏http://www.datastax.com/dev/blog/datetieredcompactionstrategy
https://docs.datastax.com/en/cassandra/3.0/cassandra/dml/dmlHowDataMaintain.html#stcs-compaction
做那是我的懷疑。如果你只在'base_time_seconds'內選擇了4個SSTable,你可以擁有任意數量的SSTable,那'base_time_seconds'有什麼意義呢?另外,所有較早的SSTables總是參與壓縮或不壓縮? – Naresh
- 1. Cassandra DateTieredCompactionStrategy SSTables
- 2. cassandra中的主要壓縮
- 3. 如何解壓縮壓縮的內核
- 4. 如何在內存中解壓縮GZip壓縮文件?
- 5. Cassandra沒有壓縮sstables?
- 6. cassandra強制輕微壓縮?
- 7. Cassandra壓縮代碼庫
- 8. 如何在內存中壓縮commons compress?
- 9. 內部HDFS文件壓縮
- 10. 在Akamai中壓縮內容
- 11. 如何壓縮內置.net壓縮類的目錄?
- 12. WinXP的「發送到壓縮(壓縮)文件夾」如何決定包含在zip文件中?
- 13. Cassandra CRUD交易的壓縮策略
- 14. 如何解決動態壓縮時err_content_decoding_failed?
- 15. 如何在Java中壓縮JSON和在Javascript中解壓縮
- 16. 如何在Android.mk中定義對壓縮和解壓縮的引用
- 17. 如何在android中壓縮/壓縮我的位圖數組?
- 18. 如何在winrt中解壓縮由SharpZipLib壓縮的字符串?
- 19. matplotlib,如何壓縮x軸的部分
- 20. 如何壓縮在asp.net數據,並在JavaScript中解壓縮
- 21. 部分FileStream壓縮/解壓縮
- 22. cassandra壓縮應該多頻繁
- 23. Cassandra - 引導新節點 - 未壓縮
- 24. 在內存中壓縮/解壓縮字符串
- 25. 取消Cassandra中正在進行的壓縮作業
- 26. 如何在橫向視圖中解決圖像壓縮問題?
- 27. Adobe Acrobat壓縮內部對象?
- 28. 如何在cassandra中禁用壓縮並在結束時再次啓動?
- 29. Cassandra SSTables一代內存消耗/可用壓縮?
- 30. 如何在emacs中打開時自動解壓縮自定義壓縮文件?
DTCS是相當混亂,難調,如果切換到TWCS它變得輕鬆了許多。在C * TWCS的較新版本替換DTCS,得到它的C * 2.0,你可能需要去https://github.com/jeffjirsa/twcs和港口它,因爲它僅適用於2.1+ –