您好,登錄后才能下訂單哦!
這篇文章主要介紹“Hbase中寫為什么比讀快”,在日常操作中,相信很多人在Hbase中寫為什么比讀快問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”Hbase中寫為什么比讀快”的疑惑有所幫助!接下來,請跟著小編一起來學習吧!
首先,需要明確的是,Hbase寫入速度比讀取速度要快,根本原因LSM存儲引擎
Hbase底層的存儲引擎為LSM-Tree(Log-Structured Merge-Tree)。
LSM核心思想的核心就是放棄部分讀能力,換取寫入的最大化能力。LSM Tree ,這個概念就是結構化合并樹的意思,它的核心思路其實非常簡單,就是假定內存足夠大,因此不需要每次有數據更新就必須將數據寫入到磁盤中,而可以先將最新的數據駐留在內存中,等到積累到最后多之后,再使用歸并排序的方式將內存內的數據合并追加到磁盤隊尾(因為所有待排序的樹都是有序的,可以通過合并排序的方式快速合并到一起)。
LSM樹的設計思想非常樸素:將對數據的修改增量保持在內存中,達到指定的大小限制后將這些修改操作批量寫入磁盤,不過讀取的時候稍微麻煩,需要合并磁盤中歷史數據和內存中最近修改操作,所以寫入性能大大提升,讀取時可能需要先看是否命中內存,否則需要訪問較多的磁盤文件。極端的說,基于LSM樹實現的HBase的寫性能比MySQL高了一個數量級,讀性能低了一個數量級。
LSM樹原理把一棵大樹拆分成N棵小樹,它首先寫入內存中,隨著小樹越來越大,內存中的小樹會flush到磁盤中,磁盤中的樹定期可以做merge操作,合并成一棵大樹,以優化讀性能。
參考博客:性能測試
HBase能提供實時計算服務主要原因是由其架構和底層的數據結構決定的,即由LSM-Tree(Log-Structured Merge-Tree) + HTable(region分區) + Cache決定——客戶端可以直接定位到要查數據所在的HRegion server服務器,然后直接在服務器的一個region上查找要匹配的數據,并且這些數據部分是經過cache緩存的。
前面說過HBase會將數據保存到內存中,在內存中的數據是有序的,如果內存空間滿了,會刷寫到HFile中,而在HFile中保存的內容也是有序的。當數據寫入HFile后,內存中的數據會被丟棄。
HFile文件為磁盤順序讀取做了優化,按頁存儲。下圖展示了在內存中多個塊存儲并歸并到磁盤的過程,合并寫入會產生新的結果塊,最終多個塊被合并為更大塊。
hbase讀取速度快
多次刷寫后會產生很多小文件,后臺線程會合并小文件組成大文件,這樣磁盤查找會限制在少數幾個數據存儲文件中。HBase的寫入速度快是因為它其實并不是真的立即寫入文件中,而是先寫入內存,隨后異步刷入HFile。所以在客戶端看來,寫入速度很快。另外,寫入時候將隨機寫入轉換成順序寫,數據寫入速度也很穩定。
而讀取速度快是因為它使用了LSM樹型結構,而不是B或B+樹。磁盤的順序讀取速度很快,但是相比而言,尋找磁道的速度就要慢很多。HBase的存儲結構導致它需要磁盤尋道時間在可預測范圍內,并且讀取與所要查詢的rowkey連續的任意數量的記錄都不會引發額外的尋道開銷。比如有5個存儲文件,那么最多需要5次磁盤尋道就可以。而關系型數據庫,即使有索引,也無法確定磁盤尋道次數。而且,HBase讀取首先會在緩存(BlockCache)中查找,它采用了LRU(最近最少使用算法),如果緩存中沒找到,會從內存中的MemStore中查找,只有這兩個地方都找不到時,才會加載HFile中的內容,而上文也提到了讀取HFile速度也會很快,因為節省了尋道開銷。
舉例:
A:如果快速查詢(從磁盤讀數據),hbase是根據rowkey查詢的,只要能快速的定位rowkey, 就能實現快速的查詢,主要是以下因素:
1、hbase是可劃分成多個region,你可以簡單的理解為關系型數據庫的多個分區。
2、鍵是排好序了的
3、按列存儲的
首先,能快速找到行所在的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原則),會取得更高的效率。
B:實時查詢
實時查詢,可以認為是從內存中查詢,一般響應時間在1秒內。HBase的機制是數據先寫入到內存中,當數據量達到一定的量(如128M),再寫入磁盤中, 在內存中,是不進行數據的更新或合并操作的,只增加數據,這使得用戶的寫操作只要進入內存中就可以立即返回,保證了HBase I/O的高性能。
實時查詢,即反應根據當前時間的數據,可以認為這些數據始終是在內存的,保證了數據的實時響應
到此,關于“Hbase中寫為什么比讀快”的學習就結束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學習,快去試試吧!若想繼續學習更多相關知識,請繼續關注億速云網站,小編會繼續努力為大家帶來更多實用的文章!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。