3、HBase 的表結構
HBase 是一個NoSQL數據庫,用於處理海量數據,能夠支持10億行百萬列的大表,下面就瞭解一下數據是如何存放在HBase表中的架構
關係型數據庫的表結構post
爲了更好的理解HBase表的思路,先回顧一下關係數據庫中表的處理方式spa
例若有一個用戶表user_info,有字段:id、name、tel,表名和字段須要在建表時指定架構設計
create table user_info (設計
id 類型,3d
name 類型,blog
tel 類型ci
)table
而後插入兩條數據
insert into user_info values(...)
表結構
id |
name |
tel |
1 |
小明 |
123 |
2 |
小王 |
456 |
後來字段不夠用了,新用戶須要記錄地址,就要新增一個字段
id |
name |
tel |
addr |
1 |
小明 |
123 |
|
2 |
小王 |
456 |
之後再增長需求時,就繼續新增字段,或者添加一個擴展表
上面的內容主要說明的是:
- 建表的方式,需提早指定表名和字段
- 插入記錄的方式,指定表名和各字段的值
- 數據表是二維結構,行和列
- 添加字段不靈活
下面看一下HBase的處理方式
HBase的表結構
建表時要指定的是:表名、列族
建表語句
create 'user_info', 'base_info', 'ext_info'
意思是新建一個表,名稱是user_info,包含兩個列族base_info和ext_info
列族 是列的集合,一個列族中包含多個列
這時的表結構:
row key |
base_info |
ext_info |
... |
... |
... |
row key 是行鍵,每一行的ID,這個字段是自動建立的,建表時不須要指定
插入一條用戶數據:name爲‘a’,tel爲‘123’
插入語句
put 'user_info', 'row1', 'base_info:name', 'a'
put 'user_info', 'row1', 'base_info:tel', '123'
意思是向user_info表中行健爲row1的base_info列族中添加一項數據 name:a,接着又添加一項數據tel:123
name和tel就是具體字段,屬於base_info這個列族
這時的表結構:
row key |
base_info |
ext_info |
row1 |
name:a, tel:123 |
再插入一條數據:name爲‘b’,addr爲‘beijing’
put 'user_info', 'row2', 'base_info:name', 'b'
put 'user_info', 'row2', 'ext_info:addr', 'bj'
這時的表結構:
row key |
base_info |
ext_info |
row1 |
name:a, tel:123 |
|
row2 |
name:b |
addr:bj |
HBase表中還有一個重要概念:版本,每一個字段的值都有版本信息(經過時間戳指定)
例如 base_info:name,每次修改時都會保留以前的值,就是說能夠取到他的舊值
row key |
base_info |
ext_info |
row1 |
name:a, tel:123 |
|
row2 |
name:c(v2)[name:b(v1)] |
addr:bj |
小結
從上面建表、插入數據的過程能夠看出 HBase 存儲數據的特色了
- 和關係數據庫同樣,也是使用行和列的結構
- 建表時,定義的是表名和列族(字段的集合),而不是具體字段
- 列族中能夠包含任意個字段,字段名不須要預約義,每一行中同一列族中的字段也能夠不一致
- 多維結構,關係數據庫的表是二維的,經過指行、列定位一個數據,HBase中須要經過 行健、列族名、字段名、版本號才能定位到具體數據
- 插入數據時,一次插入一個字段的數據,不是像關係數據庫那樣一次插入多個字段
4、HBase 的物理模型
6、Hbase數據檢索流程