所以我研究卡桑德拉並試圖獲得該架構的理解,我是從維基閱讀以下頁面: http://wiki.apache.org/cassandra/MemtableSSTable卡桑德拉SSTables和壓實
所以,在這裏按照工作流程,您發送請求更新你的表,這個請求被寫入到一個CommitLog中,然後被寫入一個名爲Memtable的內存表(在系統失敗的情況下可以從Commitlog重建)。一旦Memtable達到一定的大小,它將整個Memtable刷新到光盤上的SSTable,它不再只能在壓縮過程中被合併。當你達到可配置數量的SSTables時,你可以進行壓縮,它基本上將結果合併,釋放磁盤空間並創建一個新的和改進的最新SSTable。如果我在這裏理解了任何錯誤,請糾正我。
現在我有幾個關於壓實的問題。首先,這項手術有多昂貴?如果我在光盤上有兩個SSTable時要求進行壓縮,這是否會令人望而卻步,還是我會更好地服務,等到半夜使用量下降? 如果我有多個(但很小)的SSTables與幾個但非常大的SSTables相比更好嗎?有很多非壓縮SSTables會影響讀取性能嗎?併發性如何處理這個問題:如果我從這些SSTables讀取數據,那麼有人做了一個將新的Memtable刷新到磁盤的插入操作,從而導致壓縮?
任何有關此信息和經驗的信息都會很棒!
謝謝!只是一些澄清的問題:當你說「想象每個寫作創建一個新的SST」時,你的意思是在假設的情況下,你有一個非常大的寫,是否正確?其次,你能否澄清爲什麼閱讀不需要擔心SSTable消失?我的意思是,如果我必須閱讀N個SSTables,我已經閱讀了其中的一半,然後在完成之前刪除了其餘部分,這不會是一個問題嗎? – 2012-01-19 00:28:37
>當你說「想象每個寫作創建一個新的SSTable」時,你的意思是在假設的情況下,你有一個非常大的寫,是否正確? 我只是這樣做來簡化數學。實際上你會有一批(B)寫入創建一個新的SSTable,但我認爲這只是N(N^2/B)爲N次寫入,或者O(N/B)爲每次寫入(這是真的很大,比起O((log N)/ B) – 2012-01-19 18:06:14
>其次,你能否澄清爲什麼讀不需要擔心SSTables消失? 在Castle中我們引用了每個SSTable的計數;在讀的開始操作,我們調整每個SSTable上的引用計數,以防止它們消失。當引用計數變爲零時(無論是作爲合併的結果,還是讀取結束時),表格實際上都被刪除了。我猜想Cassandra可以做類似的事情,但通過使用垃圾回收器。 – 2012-01-19 18:06:29