1. 程式人生 > >HBase(2.5)-LSM樹(基於日誌結構的合併樹)

HBase(2.5)-LSM樹(基於日誌結構的合併樹)

1. LSM(Log-StructuredMerge-Tree)樹
隨著NoSQL系統尤其是類BigTable系統的流行,LSM的檔案系統越來越讓人熟知。LSM主要用於為那些長期具有很高記錄更新(插入和刪除)頻率的檔案提供低成本的索引機制。LSM樹實現了所有的索引值對於所有的查詢來說都可以通過記憶體元件或某個磁碟元件進行訪問。LSM減少了磁碟磁壁的移動次數降低了進行資料插入時磁碟磁壁的開銷。LSM在進行需要即時響應的操作時會損失I/O效率,最適用於索引插入比查詢操作多的情況。

2. lSM樹 VS B+樹
2.1 B+樹
眾所周知,RDBMS一般採用B+樹作為索引的資料結構,如圖1。RDBMS中的B+樹一般是3層n路的平衡樹。B+樹的節點對應於磁碟資料塊。因此對於RDBMS,資料更新操作需要5次磁碟操作(從B+樹3次找到記錄所在資料塊,再加上一次讀和一次寫)。

在RDBMS中,資料隨機無序寫在磁碟塊中,如果沒有B+樹,讀效能會很低。B+樹對於資料讀操作能很好地提高效能,但對於資料寫,效率不高。對於大型分散式資料系統,B+樹還無法與LSM樹相抗衡。
這裡寫圖片描述
圖1 B+ 樹
B+樹最大的效能題問是會發生大批的隨機IO,隨著新資料的插入,葉子點節會漸漸裂分,邏輯上連續的葉子點節在物理上往往不連續,甚至分離的很遠,但做圍範查詢時,會發生大批讀隨機IO。

對於大批的隨機寫也一樣,舉一個插入key跨度很大的例子,如7->1000->3->2000 … 新插入的資料儲存在磁碟上相隔很遠,會發生大批的隨機寫IO.

2.2 LSM樹
LSM樹全稱是基於日誌結構的合併樹(Log-Structured Merge-Tree)。No-SQL資料庫一般採用LSM樹作為資料結構,HBase也不例外。
LSM樹可以看成n層合併樹。在Hbase中,它把隨機寫轉換成對memstore和hfile的連續寫。圖2展示了LSM樹資料寫的過程。
這裡寫圖片描述


圖2 LSM樹

資料寫(插入,更新):資料首先順序寫如hlog (WAL), 然後寫到MemStore, 在MemStore中,資料是一個2層B+樹(圖2中的C0樹)。MemStore滿了之後,資料會被刷到storefile (hFile),在storefile中,資料是3層B+樹(圖2中的C1樹),並針對順序磁碟操作進行優化。

資料讀:首先搜尋MemStore,如果不在MemStore中,則到storefile中尋找。

資料刪除:不會去刪除磁碟上的資料,而是為資料新增一個刪除標記。在隨後的major compaction中,被刪除的資料和刪除標記才會真的被刪除。

LSM資料更新只在記憶體中操作,沒有磁碟訪問,因此比B+樹要快。對於資料讀來說,如果讀取的是最近訪問過的資料,LSM樹能減少磁碟訪問,提高效能。
LSM樹實質上就是在讀寫之間得取衡平,和B+樹比相,它牲犧了部份讀效能,用來大幅進步寫效能。

相關推薦

HBase(2.5)-LSM(基於日誌結構合併)

1. LSM(Log-StructuredMerge-Tree)樹 隨著NoSQL系統尤其是類BigTable系統的流行,LSM的檔案系統越來越讓人熟知。LSM主要用於為那些長期具有很高記錄更新(插入和刪除)頻率的檔案提供低成本的索引機制。LSM樹實現了所有的

的儲存結構的二叉連結串列(孩子—兄弟))

// c6-5.h 樹的二叉連結串列(孩子—兄弟)儲存結構(見圖6.32) typedef struct CSNode { TElemType data; CSNode *firstchild,*nextsibling; }CSNode,*CSTree; 一棵樹無論有

資料結構實現 10.2:對映_基於AVL實現(C++版)

資料結構實現 10.2:對映_基於AVL樹實現(C++版) 1. 概念及基本框架 2. 基本操作程式實現 2.1 增加操作 2.2 刪除操作 2.3 修改操作 2.4 查詢操作 2.5 其他操作 3.

資料結構實現 5.2:對映_基於連結串列實現(C++版)

資料結構實現 5.2:對映_基於連結串列實現(C++版) 1. 概念及基本框架 2. 基本操作程式實現 2.1 增加操作 2.2 刪除操作 2.3 修改操作 2.4 查詢操作 2.5 其他操作 3. 演

大話資料結構讀書筆記艾提拉總結 查詢演算法 和排序演算法比較好 第1章資料結構緒論 1 第2章演算法 17 第3章線性表 41 第4章棧與佇列 87 第5章串 123 第6章 149 第7章圖 21

大話資料結構讀書筆記艾提拉總結   查詢演算法 和排序演算法比較好     第1章資料結構緒論 1 第2章演算法 17 第3章線性表 41 第4章棧與佇列 87 第5章串 123 第6章樹 149 第7章圖 211

數據結構5的二叉 單元小結(2)遍歷二叉和線索二叉

進行 深度 bsp iteration oid 基礎 二叉樹 線索 push 概念: 遍歷二叉樹: 遍歷:指按某條搜索路線遍訪每個結點且不重復(又稱周遊)。 遍歷的用途:它是樹結構插入、刪除、修改、查找和排序運算的前提,是二叉樹一切運算的基礎和核心。 時間效率: O

mysql之 mysql 5.6不停機雙主一從搭建(活躍雙主一從基於日誌點復制)

stat 5.6 create 文件夾 eat ima send spec tar 環境說明:版本 version 5.6.25-log 主1庫ip: 10.219.24.25主2庫ip: 10.219.24.22從1庫ip:10.219.24.26os 版本: cento

2.1-2.5系統目錄結構

centos72.1-2.5系統目錄結構2.1-2.2 系統目錄結構(上)目錄結構的介紹/ 根 每一個文件和目錄從根目錄開始。 只有root用戶具有該目錄下的寫權限。請註意,/root是root用戶的家目錄。/bin中 - 用戶二進制文件 包含二進制可執行文件。 在單用戶模式下,你需要使用的常見linux命令

習題2.5 兩個有序鏈表序列的合並(15 分)浙大版《數據結構(第2版)》題目集

merge 其中 接口 cnblogs oid color 給定 style bsp 本題要求實現一個函數,將兩個鏈表表示的遞增整數序列合並為一個非遞減的整數序列。 函數接口定義: List Merge( List L1, List L2 ); 其中Lis

css選擇器(2)——屬性選擇器和基於元素結構關系的選擇器

tro 性能 border end 元素 接受 span div word 在有些標記語言中,不能使用類名和id選擇器,於是css2引入了屬性選擇器。 3.屬性選擇器   a)根據是否存在該屬性來選擇     如果希望選擇有某個屬性的元素,例如要選擇有class屬性的所有h

2.1/2.2 系統目錄結構 2.3 ls命令 2.4 文件類型 2.5 alias命令

筆記筆記筆記2.1/2.2 系統目錄結構2.3 ls命令2.4 文件類型2.5 alias命令 筆記: 系統目錄結構 ls /bin 存放的是用戶可以使用的命令(圖表還有很多) ls / sbin 存放的是管理員命令(管理員才能使用的命令) ls /boot 存放的是系統啟動文件

【Java】 大話數據結構(11) 查找算法(2)(二叉排序/二叉搜索

PE bsp clas 代碼 根節點 替代 找到 extend true 本文根據《大話數據結構》一書,實現了Java版的二叉排序樹/二叉搜索樹。 二叉排序樹介紹 在上篇博客中,順序表的插入和刪除效率還可以,但查找效率很低;而有序線性表中,可以使用折半、插值、斐波

Apollo 2.5基於動態的實時相對地圖解決方案

如何 中心線 lan 精度 poll 視覺 會有 如何工作 adc Apollo 2.5推基於動態的實時相對地圖解決方案 太平洋電腦網 百家號06-2513:19 【PConline資訊】高精地圖對於開發者及測試者來說並不是可以輕易獲得的,制作高精地圖需要大

[VCB-Studio 科普教程 2.5] 基於 PotPlayer 和 madVR 的播放器教程(已更新 XySubFilter)

高精度 out source 無法使用 需要 dev 耳機 避免 解碼 Potplayer 是高清影視常用的播放器,界面簡潔,功能齊全,比 MPC-HC 和 MPC-BE 更人性化;但其默認方案十分糟糕,預設過多錯誤,無法正確播放 10-bit 視頻,一直飽受詬病。VCB-

zigbee 之ZStack-2.5.1a目錄結構

ZStack-2.5.1a下載 http://www.ti.com.cn/tool/cn/z-stack 目前最新版ZStack-3.0.1, 我們使用ZStack-2.5.1a   目錄介紹 其中: Components是主要檔案 包含了hal,

資料結構——3.2 二叉及儲存結構

一、二叉樹的定義 二叉樹T:一個有窮的結點集合,這個集合可以為空;若不為空,則它是由根結點和稱為其左子樹TL和右子樹TR的兩個不相交的二叉樹組成。 1)二叉樹的五種基本形態 2)二叉樹的子樹有左右順序之分 3)特殊的二叉樹 斜二叉樹:只往一邊倒,只有左兒子,

資料結構------線段2:區間詢問與單點修改

上一次我們講到線段樹的概念和建樹,今天,我們來講線段樹的區間詢問與單點修改。 ~~~~~~~~~~~~ |       區間詢問       | ~~~~~~~~~~~~ 一般來說,區間詢問是以這樣的形式出現滴: 給定一個區間 [ l ,

資料結構實現 4.2:集合_基於連結串列實現(C++版)

資料結構實現 4.2:集合_基於連結串列實現(C++版) 1. 概念及基本框架 2. 基本操作程式實現 2.1 增加操作 2.2 刪除操作 2.3 查詢操作 2.4 其他操作 3. 演算法複雜度分析

HBase(2):hbase物理模型結構

一.物理結構圖 二.關鍵概念 1.儲存單元Cell (1)儲存單元cell:rowkey+列簇+timestamp+version,確定一個單元格的值  (2)資料無型別,以位元組碼的形式進行儲存 2.Region (1)列分割:table中所有的行都是按照字典序