為何HBase速度很快

2021-08-18 11:52:58 字數 1830 閱讀 1807

為何hbase速度很快?

hbase能提供實時計算服務主要原因是由其架構和底層的資料結構決定的,即由lsm-tree(log-structured merge-tree) + htable(region分割槽) + cache決定——客戶端可以直接定位到要查資料所在的hregion server伺服器,然後直接在伺服器的乙個region上查詢要匹配的資料,並且這些資料部分是經過cache快取的。

前面說過hbase會將資料儲存到記憶體中,在記憶體中的資料是有序的,如果記憶體空間滿了,會刷寫到hfile中,而在hfile中儲存的內容也是有序的。當資料寫入hfile後,記憶體中的資料會被丟棄。

hfile檔案為磁碟順序讀取做了優化,按頁儲存。下圖展示了在記憶體中多個塊儲存並歸併到磁碟的過程,合併寫入會產生新的結果塊,最終多個塊被合併為更大塊。

多次刷寫後會產生很多小檔案,後台執行緒會合併小檔案組成大檔案,這樣磁碟查詢會限制在少數幾個資料儲存檔案中。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速度很快

為何hbase速度很快?hbase能提供實時計算服務主要原因是由其架構和底層的資料結構決定的,即由lsm tree log structured merge tree htable region分割槽 cache決定 客戶端可以直接定位到要查資料所在的hregion server伺服器,然後直接在伺...

Ubuntu國內源,更新速度很快喲

163源 deb trusty main restricted universe multiverse deb trusty security main restricted universe multiverse deb trusty updates main restricted univers...

樹莓上換國內源 速度很快

1 備份為 sources.list.bak cp etc apt sources.list etc apt sources.list.bak2 編輯sources.list檔案 sudo nano etc apt sources.list 3 將原有內容用 注釋 4 換為以下內容 按ctrl o,...