LevelDb日知錄之五:MemTable詳解

來源:互聯網
上載者:User

標籤:

【LevelDb日知錄之五:MemTable詳解】

  LevelDb日知錄前述小節大致講述了磁碟檔案相關的重要靜態結構,本小節講述記憶體中的資料結構Memtable,Memtable在整個體系中的重要地位也不言而喻。總體而言,所有KV資料都是儲存在Memtable,Immutable Memtable和SSTable中的,Immutable Memtable從結構上講和Memtable是完全一樣的,區別僅僅在於其是唯讀,不允許寫入操作,而Memtable則是允許寫入和讀取的。當Memtable寫入的資料佔用記憶體到達指定數量,則自動轉換為Immutable Memtable,等待Dump到磁碟中,系統會自動產生新的Memtable供寫操作寫入新資料,理解了Memtable,那麼Immutable Memtable自然不在話下。

  LevelDb的MemTable提供了將KV資料寫入,刪除以及讀取KV記錄的操作介面,但是事實上Memtable並不存在真正的刪除操作,刪除某個Key的Value在Memtable內是作為插入一條記錄實施的,但是會打上一個Key的刪除標記,真正的刪除操作是Lazy的,會在以後的Compaction過程中去掉這個KV。

  需要注意的是,LevelDb的Memtable中KV對是根據Key大小有序儲存的,在系統插入新的KV時,LevelDb要把這個KV插到合適的位置上以保持這種Key有序性。其實,LevelDb的Memtable類只是一個介面類,真正的操作是通過背後的SkipList來做的,包括插入操作和讀取操作等,所以Memtable的核心資料結構是一個SkipList。

  SkipList是平衡樹的一種替代資料結構,但是和紅/黑樹狀結構不相同的是,SkipList對於樹的平衡的實現是基於一種隨機化的演算法的,這樣也就是說SkipList的插入和刪除的工作是比較簡單的。

  關於SkipList的詳細介紹可以參考這篇文章:http://www.cnblogs.com/xuqiang/archive/2011/05/22/2053516.html,講述的很清楚,LevelDb的SkipList基本上是一個具體實現,並無特殊之處。

  SkipList不僅是維護有序資料的一個簡單實現,而且相比較平衡樹來說,在插入資料的時候可以避免頻繁的樹節點調整操作,所以寫入效率是很高的,LevelDb整體而言是個高寫入系統,SkipList在其中應該也起到了很重要的作用。Redis為了加快插入操作,也使用了SkipList來作為內部實現資料結構。

參考:http://www.cnblogs.com/haippy/archive/2011/12/04/2276064.html

LevelDb日知錄之五:MemTable詳解

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.