一文講清HBase的儲存結構

2021-09-07 14:46:53 字數 2685 閱讀 2572

hbase是乙個分布式的、多版本、面向列的開源kv資料庫。執行在hdfs的基礎上,支援pb級別、百萬列的資料儲存。作為效能如此強大的kv資料庫,hbase的儲存結構究竟是怎樣的呢?面向列的儲存結構究竟有什麼樣的不同之處呢?接下來會詳細講解這部分。

為了清晰地表述這個,我們把hbase的儲存結構分為邏輯結構物理結構兩個部分來描述。

邏輯儲存結構

通過下圖直觀地展示hbase的邏輯儲存結構:

在本圖中,列簇(column family)對應的值就是infoarea,列(column或者稱為qualifier)對應的就是nameagecountrycityrow key對應的就是row 1row 2cell對應的就是具體的值。

看完這張圖,是不是有點疑惑,怎麼獲取其中的一條資料呢?既然hbasekv的資料庫,那麼當然是以獲取key的形式來獲取到value啦。在hbase中的key組成是這樣的:

key的組成是以row keycf(column family)columntimestamp組成的。

timestamphbase中充當的作用就是版本號,因為在hbase中有著資料多版本的特性,所以同乙個key可以有多個版本的value值(可以通過配置來設定多少個版本)。查詢的話是預設取回最新版本的那條資料,但是也可以進行查詢多個版本號的資料,在接下來的高階操作文章中會有演示。

region server 和 region 的關係

物理儲存結構

先來看這張圖:

為了不混淆,我們可以先把以下的概念一一對應起來

邏輯結構

物理結構

region server

hregion server

region

hregion

cfhstore(這裡指的是store)

在具體的物理結構中

在hbase中查詢不同的cf的資料

從不同的cf中查詢row 3主鍵的資料,結果集如下:

更加直觀地顯示,在hbase中是以cf為單元的儲存結構。

如下圖,hbase的架構圖,在hbase中我們看到有clientzookeeperhmasterhregion

hbase讀取資料的過程

client請求讀取資料時,先**到zk集群,在zk集群中尋找到相對應的region server,再找到對應的region,先是查memstore,如果在memstore中獲取到資料,那麼就會直接返回,否則就是再由region找到對應的store file,從而查到具體的資料。

在整個架構中,hmasterhregion server可以是同乙個節點上,可以有多個hmaster存在,但是只有乙個hmaster在活躍。

client端會進行rowkey->hregion對映關係的快取,降低下次定址的壓力。

hbase 寫入資料的過程

先是client進行發起資料的插入請求,如果client本身儲存了關於rowkeyregion的對映關係的話,那麼就會先查找到具體的對應關係,如果沒有的話,就會在zk中進行查詢到對應region server,然後再**到具體的region上。所有的資料在寫入的時候先是記錄在wal中,同時檢查關於memstore是否滿了,如果是滿了,那麼就會進行刷盤,輸出到乙個hfile中,如果沒有滿的話,那麼就是先寫進memstore中,然後再刷到wal中。

ps:畫圖的過程是真滴累啊!!!

題圖:chichimaru

一文講清ArrayList的原理

arraylist底層採用陣列實現,具有也具有陣列的優缺點,同時支援動態擴容 擴充套件為原來的1.5倍 所以它非常適合需要使用索引快速訪問的場景。同時由於其自動擴容的功能,我們需要注意在初始化集合時需要指定大小。02 特點 03 具體 最後從原始碼裡具體分析一下,arraylist中的新增 add ...

一文講清楚事務隔離性

乙個人運算元據庫的時候,其他人都看不見 其他人不能讀 mvcc 其他人不能寫 通過加鎖 鎖 read view一般由兩部分組成 排他鎖小紅對取前的時候加上了鎖 排他鎖 所以其他人不能取錢了,所以等小紅這個操作 事務 結束了,這把鎖才能解開 事務的開始時間是更新操作執行的時候 讀未提交沒有mvcc的控...

一文講清楚vim的map對映

map主用自定義快捷鍵,如 map a b 把b對映為a鍵,使之按下a的時候執行b快捷鍵 在vim配置檔案中經常會看到map nmap imap vmap vnoremap nunmap nmapclear等,都是什麼意思呢?map前的n v nore un等表示下列含義 如 nmap s wqa ...