Hbase 儲存結構 資料模型

2021-08-27 07:42:55 字數 1749 閱讀 8634

table

hbase以表的形式儲存資料。表有行和列組成。列劃分為若干個列族(column family),一行由rowkey 時間戳,若干個列組成。除了rowkey和時間戳外,其他的列稱為列族,他的命名有一定的規範。

rowkey就像關聯式資料庫的主鍵,用來檢索記錄。table中所有的記錄按rowkey來排序,訪問hbase表的記錄有三種方式,分別是

1 通過單個row key訪問

2 通過row key的range

3 全表掃瞄

時間戳:用來區分同乙份資料的版本。並且按順序排序,每次查詢都將返回最新版本的資料。

region

table由region組成,剛開始table就乙個region,隨著table中的資料增大,到大到一定程度時,hbase會將region切分為兩個相等大小的region,region是分布式儲存和負載均衡的最小單元,即不同的region可以分別在不同的region server上。相同的region不能拆分。

store

region是分布式的最小單元,單不是儲存的最小單元,每乙個region有乙個或多個store組成,至少是乙個store,hbase會把一起訪問的資料放在乙個store裡面,即為每個columnfamily建乙個store,也說明乙個store儲存乙個columnfamily。也說明如果有幾個columnfamily,也就有幾個store。乙個store由乙個memstore和0或者多個storefile組成。

memstore

memstore 是放在記憶體裡的。儲存修改的資料即keyvalues。當memstore的大小達到乙個閥值時,memstore會被flush到檔案,即生成乙個快照。目前hbase 會有乙個執行緒來負責memstore的flush操作。

storefile

memstore記憶體中的資料寫到檔案後就是storefile,storefile是一hfile的格式儲存。

hfile

hfile是hbase的儲存格式。是鍵值對的格式,鍵值對都是位元組陣列。hfile除了儲存鍵值對,還需要儲存鍵值對的索引資訊,主要包含六個部分。

data block 段–儲存表中的資料,這部分可以被壓縮

meta block 段 (可選的)–儲存使用者自定義的kv對,可以被壓縮。

file info 段–hfile的元資訊,不被壓縮,使用者也可以在這一部分新增自己的元資訊。

data block index 段–data block的索引。每條索引的key是被索引的block的第一條記錄的key。

meta block index段 (可選的)–meta block的索引。

trailer– 這一段是定長的。儲存了每一段的偏移量,讀取乙個hfile時,會首先讀取trailer,trailer儲存了每個段的起始位置(段的magic number用來做安全check),然後,datablock index會被讀取到記憶體中,這樣,當檢索某個key時,不需要掃瞄整個hfile,而只需從記憶體中找到key所在的block,通過一次磁碟io將整個 block讀取到記憶體中,再找到需要的key。datablock index採用lru機制淘汰。

hfile的data block,meta block通常採用壓縮方式儲存,壓縮之後可以大大減少網路io和磁碟io,隨之而來的開銷當然是需要花費cpu進行壓縮和解壓縮

hbase資料模型

與nosql資料庫們一樣,rowkey是用來檢索記錄的主鍵。訪問hbase table中的行 訪問方式 a.通過單個row key訪問,b.通過row key的range 正則 c.全表掃瞄,rowkey是任意字串,最大長度 是 64kb,實際應用中長度一般為 10 100bytes,hbase內部...

Hbase資料模型

hbase 以表的形式儲存資料。表由行和列族組成。列劃分為若干個列族 row family 其邏輯檢視如下 幾個關鍵概念 1 行鍵 rowkey 行鍵是位元組陣列,任何字串都可以作為行鍵 表中的行根據行鍵進行排序,資料按照 row key 的位元組序 byte order 排序 儲存 所有對錶的訪問...

hbase資料模型

與nosql資料庫一樣,row key是用來檢索記錄的主鍵。訪問hbase table中的行,只有三種方式 1.通過單個row key訪問 2.通過row key的range 正則 3.全表掃瞄 row key行鍵 row key 可以是任意字串 最大長度 是 64kb,實際應用中長度一般為 10 ...