2016-11-15 59 views
0

我遇到了Cassandra的這個Datastax文檔。我不明白here它被提到min_thresholdThe 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中決定壓縮內部

+0

DTCS是相當混亂,難調,如果切換到TWCS它變得輕鬆了許多。在C * TWCS的較新版本替換DTCS,得到它的C * 2.0,你可能需要去https://github.com/jeffjirsa/twcs和港口它,因爲它僅適用於2.1+ –

回答

0

讓我們瞭解一些事情。

數據是怎樣被存儲

在文件卡桑德拉寫入過程數據保存在叫做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

+0

做那是我的懷疑。如果你只在'base_time_seconds'內選擇了4個SSTable,你可以擁有任意數量的SSTable,那'base_time_seconds'有什麼意義呢?另外,所有較早的SSTables總是參與壓縮或不壓縮? – Naresh

相關問題