最近,我一直在從我們的新項目的角度來看待Cassandra,並從這個社區和它的wiki中學到了很多東西。但是在物理磁盤空間管理方面,我沒有發現關於如何在Cassandra中管理更新的任何信息,儘管它似乎與使用壓縮的記錄刪除管理非常相似。cassandra的物理磁盤空間管理
假設有100條記錄與5個值的每一個,所以當所有的改變將被刷新磁盤中的所有記錄將被相鄰的書面當刪除操作完成那麼它標誌着存儲表第一和物理記錄一些時間後刪除在配置中設置或完全設置。壓實過程要求空間。
現在的問題是,在一側是模式較少有列沒有固定數量的開始,但在另一邊時,壓實過程中發生的話..它提出了相鄰的記錄在磁盤上像傳統的RDBMS速度讀取過程與RDBMS一樣簡單,因爲它們必須根據列數據類型的聲明分配固定的空間量。
但是,Cassandra如何在壓縮過程中精確地將記錄放置在磁盤上(用於更新/刪除)以加快讀取速度?
還有一個與壓縮相關的問題是,如果沒有刪除查詢,但有一個更新查詢用一些可變長度數據更新一個存在的記錄,或者全部插入一個新列,那麼壓縮如何使它在磁盤上的空間可用已經存在的數據行?
然後,當編輯的行的一部分位於兩個不同的SSTables中時,如何進行讀取?這兩個SStables是合併還是完成行記錄寫入單個SSTable而從其他SSTable刪除部分? –
一旦寫入SSTables是不可變的。當一行存在於多個SSTables上時,它們在讀取時合併。將壓縮(如上所述)視爲碎片整理 - 爲任何給定的列族保留SSTable的數量,並將給定行的碎片列合併到單個SSTable中。 – zznate