LSM-tree 一種高效的索引資料結構

來源:互聯網
上載者:User

轉載:http://bofang.iteye.com/blog/1676698

論文 The Log-Structure Merge-Tree(LSM-tree)(http://www.google.com.my/url?sa=t&rct=j&q=&esrc=s&source=web&cd=4&cad=rja&ved=0CDoQFjAD&url=http%3A%2F%2Fciteseerx.ist.psu.edu%2Fviewdoc%2Fdownload%3Fdoi%3D10.1.1.44.2782%26rep%3Drep1%26type%3Dpdf&ei=6OlPUJuZFsaYiAfIkIHIDg&usg=AFQjCNGGoN9IFTLShcv2HbL0RVQdElfxow&sig2=8wysS63qlqRvWf5m3lk7bg) 描述了這種資料結構的目標和演算法細節。

 

LSM-tree主要目標是快速地建立索引。B-tree是建立索引的通用技術,但是,在大並發插入資料的情況下,B-tree需要大量的磁碟隨機IO,很顯然,大量的磁碟隨機IO會嚴重影響索引建立的速度。特別地,對於那些索引資料大的情況(例如,兩個列的聯合索引),插入速度是對效能影響的重要指標,而讀取相對來說就比較少。LSM-tree通過磁碟的順序寫,來達到最優的寫效能,因為這會大大降低磁碟的尋道次數,一次磁碟IO可以寫入多個索引塊。

 

LSM-tree的主要思想是劃分不同等級的樹。以兩級樹為例,可以想象一份索引資料由兩個樹組成,一棵樹存在於記憶體,一棵樹存在於磁碟。記憶體中的樹可以不一定是B-樹,可以是其他的樹,例如AVL樹。因為資料大小是不同的,沒必要犧牲CPU來達到最小的樹高度。而存在於磁碟的樹是一棵B-樹。

 

 

資料首先會插入到記憶體中的樹。當記憶體中的樹中的資料超過一定閾值時,會進行合併作業。合併作業會從左至右遍曆記憶體中的樹的葉子節點與磁碟中的樹的葉子節點進行合并,當被合并的資料量達到磁碟的儲存頁的大小時,會將合并後的資料持久化到磁碟,同時更新父親節點對葉子節點的指標。

 

 

之前存在於磁碟的葉子節點被合并後,舊的資料並不會被刪除,這些資料會拷貝一份和記憶體中的資料一起順序寫到磁碟。這會操作一些空間的浪費,但是,LSM-tree提供了一些機制來回收這些空間。

 

磁碟中的樹的非葉子節點資料也被緩衝在記憶體中。

 

資料尋找會首先尋找記憶體中樹,如果沒有查到結果,會轉而尋找磁碟中的樹。

 

有一個很顯然的問題是,如果資料量過於龐大,磁碟中的樹相應地也會很大,導致的後果是合并的速度會變慢。一個解決方案是建立各個層次的樹,低層次的樹都比上一層次的樹資料集大。假設記憶體中的樹為c0, 磁碟中的樹按照層次一次為c1, c2, c3, ... ck-1, ck。合并的順序是(c0, c1), (c1, c2)...(ck-1, ck)。

 

為什麼LSM-tree的插入很快

 

1. 首先,插入操作首先會作用於記憶體,並且,記憶體中的樹不會很大,這會很快。

2. 合併作業會順序寫入一個或多個磁碟頁,這比隨機寫快得多。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.