2016-05-16 70 views
1

我有一個表經常使用常規INSERT語句覆蓋行。該表包含約50GB的數據,其中大部分數據每天都被覆蓋。釋放被覆蓋的數據的磁盤空間?

但是,根據OpsCenter的說法,磁盤使用量一直在增加並且沒有被釋放。

我已驗證行被覆蓋,而不是簡單地被附加到表。但他們顯然仍在佔用磁盤空間。

如何釋放磁盤空間?

+0

什麼是你的壓縮策略,你可以展示一個表和插入語句的例子嗎? –

+0

「這張表包含大約50GB的數據,其中大部分數據每天都被覆蓋。」 - 是的,真的不是Cassandra的最佳用例。 – Aaron

回答

3

在這些寫入過程中,卡桑德拉的方式是用新的時間標記將新行附加到SSTable。當您執行讀取時,最新的行(基於時間戳)將作爲行返回給您。但是,這也意味着您正在使用磁盤空間的兩倍來完成此操作。直到Cassandra運行壓縮操作後,舊的行纔會被刪除並恢復磁盤空間。這裏是卡桑德拉如何寫入磁盤,這解釋過程中的一些信息:

http://docs.datastax.com/en/cassandra/2.0/cassandra/dml/dml_write_path_c.html?scroll=concept_ds_wt3_32w_zj__dml-compaction

壓實由節點的基礎節點上完成,並在此期間,可能會影響你的集羣的性能非常磁盤密集型操作它正在運行的時間。

https://docs.datastax.com/en/cassandra/2.0/cassandra/tools/toolsCompact.html

亞倫在上面每天覆蓋集羣中的所有數據他的評論中提到的是不是真的最好的用例爲卡桑德拉因爲如問題:您可以使用nodetool緊湊命令運行手動壓縮這個。

+0

感謝您的鏈接 - 理解壓縮和調整它有點幫助了這裏! – mikestaszel