LSM的儲存和定位

caohongfeng666發表於2019-05-16
  1.  LSM的儲存

主要思想是將直接修改樹形結構,改為分幾個層級來完成。當完成第一個層級時就反饋完成,其他交由後臺來處理。

流程是先寫入memory table,之後merge到低階別的sstable,最後merge到高階別的sstable。


如下是Hbase的大體結構:



    2. 定位

Trailer–這一段是定長的。儲存了每一段的偏移量,讀取一個HFile時,會首先 讀取Trailer,Trailer儲存了每個段的起始位置(段的Magic Number用來做安全check),然後,DataBlock Index會被讀取到記憶體中,這樣,當檢索某個key時,不需要掃描整個HFile,而只需從記憶體中找到key所在的block,透過一次磁碟io將整個 block讀取到記憶體中,再找到需要的key。DataBlock Index採用LRU機制淘汰。


首先,能快速找到行所在的region(分割槽),假設表有10億條記錄,佔空間1TB,   分列成了500個region,  1個region佔2個G. 最多讀取2G的記錄,就能找到對應記錄; 

其次,是按列儲存的,其實是列族,假設分為3個列族,每個列族就是666M, 如果要查詢的東西在其中1個列族上,1個列族包含1個或者多個HStoreFile,假設一個HStoreFile是128M, 該列族包含5個HStoreFile在磁碟上. 剩下的在記憶體中。

再次,是排好序了的,你要的記錄有可能在最前面,也有可能在最後面,假設在中間,我們只需遍歷2.5個HStoreFile共300M

最後,每個HStoreFile(HFile的封裝),是以鍵值對(key-value)方式儲存,只要遍歷一個個資料塊中的key的位置,並判斷符合條件可以了。 一般key是有限的長度,假設跟value是1:19(忽略HFile上其它塊),最終只需要15M就可獲取的對應的記錄,按照磁碟的訪問100M/S,只需0.15秒。 加上塊快取機制(LRU原則),會取得更高的效率。



來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/25380026/viewspace-2644557/,如需轉載,請註明出處,否則將追究法律責任。

相關文章