HBase數據庫相關基本知識


HBase數據庫相關知識

1、 HBase相關概念模型

l  表(table),與關系型數據庫一樣就是有行和列的表

l  行(row),在表里數據按行存儲、行由行鍵(rowkey)唯一標識,沒有數據類型統一為byte[]數組

l  列族(column family),行里的數據按列族分組String類型,每個表必須至少有一個列族

l  列限定符(column qualifier),列族里的數據用列限定符定位。類似關系型數據庫里面的列,不必事前定義,沒有數據類型同樣是byte[]數組

l  單元(cell),單元值我們真實存儲的數據(value),沒有數據類型byte[]數組

l  時間版本(version),單元值有時間版本,時間版本用時間戳標識long類型(默認保留3個數據版本)

2、 數據存儲模型

Hbase集群數據存儲底層使用HDFS保障數據容錯(一個節點宕機負責遷移數據到另外節點保證數據一致),多機器分布式存儲(下圖為一個機器節點存儲示意圖)

 

 

 

       每個Hbase服務host主機被HDFS視為一個DataNode(數據節點)每個數據節點有一個RegionServer(區域服務)負責讀寫服務。

3、 表存儲分區

下圖是一張表在Hbase中存儲的數據分割,數據通過行鍵(rowkey)進行數據分割到不同Regionserver(如果行鍵是有一定規則的Hbase一般不會負載分發數據,一般會將行鍵原始值進行MD5或哈希散列計算之后作為行鍵存儲)

      

 

4、 表中各元素關系

 

      

 

       一個表中可以有多個列族,但不宜太多(有待考究)一般是3~5個左右。其中類某些列族里面的數據可以一對多的關系,兩個列族之間互不影響(見下圖)

 

 

 

 

5、 Hbase數據物理存儲與邏輯表結構及數據版本的關系

 

 

 

       Hbase的張表是一個目錄,下面是列族目錄,不同的列族在存儲路徑上互不影響,一個列族內的數據存儲在一個HFile上面。

       每個列族內的每一列的每個cell數據都有自己的版本(Hbase默認保存3個版本的數據,可設置)。

插入新數據作為數據(value)的第一個版本(如不指定時間戳版本Hbase自動生成)。

更新數據不會再原有數據上做更新,同插入數據一樣,只不過在之前版本的前面(邏輯上)獲取新的時間戳(version)。

讀取數據的時候一般讀取倒序第一行就是后插入的數據,同時也可以讀取之前保存的版本數據。

刪除數據不會馬上真實的刪除存儲的數據,只是對要刪除的數據進行標記(不會被查詢到),等待HFile數據合並的時候進行一起刪除。

 

下圖為鍵值關系及版本示意圖

 

 

 

       要想定位 “張三” 需要 行鍵,列族,列,時間戳(version)定位到。

 

6、 HBase優勢

通過上面簡單了解HBase有如下特點

  1. 非常突出“列”的概念,null值不占空間
  2. 每張表只能有一個索引,就是行鍵(rowkey)
  3. 列族可以標識一類列,兩個列族之間互不影響
  4. 存在多個數據版本
  5. 更新和刪除操作比較特殊
  6. 數據結構無限制

通過特點有一下優勢

  1. 吞吐量高
  2. 隨機讀非常快(按rowkey讀取)
  3. 集群容錯好
  4. 橫向擴展方便,適合長期存儲

劣勢

1. 不支持二級索引

2. HFile數據文件合並或拆分會對服務可用性造成一定影響

3. 行鍵(rowkey)實際使用需要進行良好設計

4.    很難進行模糊查詢和部分數據提取

7、 針對不足一些方案

針對不支持二級索引的可以使用另一張表進行二級索引存儲或使用redis進行二級索引存儲。

HFile數據合並或拆分在業務閑時進行操作

行鍵根據實際業務需求進行設計


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM