hbase
是乙個分布式的、多版本、面向列的開源kv
資料庫。執行在hdfs
的基礎上,支援pb
級別、百萬列的資料儲存。作為效能如此強大的kv資料庫,hbase
的儲存結構究竟是怎樣的呢?面向列的儲存結構究竟有什麼樣的不同之處呢?接下來會詳細講解這部分。
為了清晰地表述這個,我們把hbase
的儲存結構分為邏輯結構和物理結構兩個部分來描述。
邏輯儲存結構
通過下圖直觀地展示hbase
的邏輯儲存結構:
在本圖中,列簇(column family
)對應的值就是info
和area
,列(column
或者稱為qualifier
)對應的就是name
、age
、country
和city
,row key
對應的就是row 1
和row 2
,cell
對應的就是具體的值。
看完這張圖,是不是有點疑惑,怎麼獲取其中的一條資料呢?既然hbase
是kv
的資料庫,那麼當然是以獲取key
的形式來獲取到value
啦。在hbase
中的key
組成是這樣的:
key
的組成是以row key
、cf(column family)
、column
和timestamp
組成的。
timestamp
在hbase
中充當的作用就是版本號,因為在hbase
中有著資料多版本的特性,所以同乙個key
可以有多個版本的value
值(可以通過配置來設定多少個版本)。查詢的話是預設取回最新版本的那條資料,但是也可以進行查詢多個版本號的資料,在接下來的高階操作文章中會有演示。
region server 和 region 的關係
物理儲存結構
先來看這張圖:
為了不混淆,我們可以先把以下的概念一一對應起來
邏輯結構
物理結構
region server
hregion server
region
hregion
cfhstore(這裡指的是store)
在具體的物理結構中
在hbase中查詢不同的cf的資料
從不同的cf
中查詢row 3
主鍵的資料,結果集如下:
更加直觀地顯示,在hbase
中是以cf
為單元的儲存結構。
如下圖,hbase
的架構圖,在hbase
中我們看到有client
、zookeeper
、hmaster
和hregion
。
hbase讀取資料的過程
client
請求讀取資料時,先**到zk
集群,在zk
集群中尋找到相對應的region server
,再找到對應的region
,先是查memstore
,如果在memstore
中獲取到資料,那麼就會直接返回,否則就是再由region
找到對應的store file
,從而查到具體的資料。
在整個架構中,hmaster
和hregion server
可以是同乙個節點上,可以有多個hmaster
存在,但是只有乙個hmaster
在活躍。
在client
端會進行rowkey
->hregion
對映關係的快取,降低下次定址的壓力。
hbase 寫入資料的過程
先是client
進行發起資料的插入請求,如果client
本身儲存了關於rowkey
和region
的對映關係的話,那麼就會先查找到具體的對應關係,如果沒有的話,就會在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 ...