聊一下cassandra的Sorted String Table的寫機制

憤怒對抗喳喳發表於2013-06-03

粗略整理了一下cassandra的SSTable的儲存機制,可以透過這個理解一下SSTable寫操作效率很高的原因

** 新增記錄,生成SSTable **

Cassandra新增記錄首先通過寫commit log,然後寫memtable,當memtable滿時,更新到磁碟上生成SSTable檔案.

聊一下cassandra的Sorted String Table的寫機制

** 更新記錄 **

SSTable檔案寫入磁碟後不再更新,如果有新增或者修改的同樣寫入commit log和memtable,並非同步寫入磁碟生成新的SSTable檔案. 這裡比較關鍵的是每一條記錄都有一個timestamp,修改記錄並不覆蓋原來記錄,而是有一個最新的timestamp,每條記錄的大致結構如下:

{
   row_key,
   column_name,
   value,
   timestamp
}

其中通過row_key來建立索引,按照順序排列,必要時column_name也能成為索引。

聊一下cassandra的Sorted String Table的寫機制

** 刪除記錄 **

同樣刪除記錄也不更新原有檔案,而是生成一個timestamp比較新的記錄,用tombstones標示該記錄已經被刪除

聊一下cassandra的Sorted String Table的寫機制

** 查詢記錄 **

如果在memtable,key cache中找不到最新記錄的話,從最新timestamp的SSTable檔案開始查詢,如果首先遇到tombstones標示,則認為記錄被刪除。 如果找到了記錄則取timestamp最新的記錄。

聊一下cassandra的Sorted String Table的寫機制 聊一下cassandra的Sorted String Table的寫機制

** 整合檔案 **

當SSTable檔案過多時,Cassandra會在後臺整合檔案,回收掉老記錄、被刪除的記錄。

聊一下cassandra的Sorted String Table的寫機制

上面的總結由於時間倉促肯定有不對的地方,大家自己參考Cassandra程式碼.

** 參考 **

相關文章