在使用Hbase之前,我們來簡單的介紹一下HBase;
Hbase是一種分佈式的列式的存儲系統,和傳統的RDBMS不一樣;
Hbase是一種面向列的數據庫;
那麼什麼是面向列?
座標系大家都知道吧?(不知道請自行百度.哈哈哈哈)幾個座標放在一起可以指定到一個準確的位置;
Hbase中的數據需要通過行鍵(Rowkey以下稱作rk),列族(ColumnFamily以下稱作cf),列(Column以下稱作 c),以及版本號(TimeStamp 默認爲時間戳),來確定的;
下面是筆者總結的HBase和RDBMS的區別
比較 | RDBMS | Hbase |
---|---|---|
數據構成 | 行式 | 面向列族 |
數據類型 | 多種類型 | String |
事務 | 多行 | 單行 |
查詢語言 | SQL | API |
安全性 | 授權&驗證 | 高版本中也有 |
索引 | 指定列 | 基於Row_Key |
存儲量 | TBs | ~1PB(只要HDFS足夠) |
讀寫速度(s) | 千次 | 百萬次 |
注:
如果想使用SQL在Hbase中查詢可以使用Phoenix框架
或者使用Hive與Hbase集成,則可以使用一些Hive的手段去查詢
比如現在有兩個人將其記錄到HBase中
RowKey | name | age | tel | address |
---|---|---|---|---|
xx1 | zhangsan | 25 | 186xxx | beijing |
xx2 | lisi | 16 | 147xxx | shanghai |
那麼name爲基礎信息將其放進一個Column_Family中basic_info
age tle address 作爲私有信息放進private_info中
id 作爲一個Rowkey
那麼通過
rk + cf + c + time ==> value
#也就像座標一樣
xx1 + basic_info + name + time ==> zhangsan
xx1 + private_info + age +time ⇒ 25
HBase和HDFS的區別
比較 | HDFS | Hbase |
---|---|---|
寫入方式 | 僅能追加 | 隨機寫入 |
讀取方式 | 全表掃描&分區掃描 | 隨機讀取&小範圍掃描&全表掃描 |
SQL性能 | 非常好 | 比HDFS慢4-5倍 |
結構化存儲 | 非常多 | 列族&列 |
存儲量 | ~PB | ~PB |