寬表數據庫之Hbase

基本概念

hbase使用hdfs存儲數據,使用zookeeper進行協調管理

column family(列族)

列族是表的垂直切分

所謂列族就是把列(column)分組,按需查找,為了解決大寬表問題

即不通的列族存儲在不同的文件中,可以減少磁盤IO,提高查詢效率

列族中的列是動態(tài)的,可以隨時添加,但是列族是靜態(tài)的,一旦創(chuàng)建就不能刪除

rowKey

rowKey是表的水平切分

每一行有個rowKey,其實就是主鍵,可以按照rowKey進行分區(qū)

即不同的row數據分布在不通的Region

存儲結構

上面的基礎概念并不很直觀,下面通過一個例子來說明hbase的存儲結構,為了清晰,會忽略部分細節(jié),并不完全嚴謹

邏輯結構

假設現在有個用戶表,包含兩個列族info和address
其中info包含name和age,address包含city和street,此時有三條數據,他們的邏輯結構如下:

rowKey Column Family: info Column Family:address
1 name:張三,age:18 city:北京,street:北京街
2 name:李四,age:19 city:天津,street:天津街
3 name:王五,age:20 city:上海,street:上海街

物理結構

hbase是KV數據庫,一個單元格可以當成一個value,key的組成是rowKey/column family/column/timestamp

timestamp是時間戳,可以用來做版本控制,如果不指定,默認是當前時間戳

繼續(xù)上一個例子,假設按rowKey按奇偶分區(qū),hbase的物理結構可簡單的描述如下:


image.png

總結

通過上圖可以很直觀的看清hbase是如何存儲數據的,簡單概括如下

  1. 通過rowKey進行水平分區(qū),將數據存儲在不同的Region中
  2. 在一個Region中,通過column family進行垂直切分,將不同的列族存儲在不同的文件中
  3. 在一個文件中,每個單元格可以看作一行數據,分為key和value,key是單元格的橫縱坐標,value是單元格值

第3條實際上是一個單元格的一個版本可以看作一行數據,key除了橫縱坐標還有時間戳,所以一個單元格可以有多個版本

事務

hbase是強一致性的

hbase支持事務有限,只支持行級事務,不支持跨行事務

hbase可以使用check and set 進行單行原子操作,即CAS操作

集群

Master節(jié)點

負責管理Region服務器(RegionServer), 包括Region的分配、負載均衡等。

不參與具體的讀寫操作,主要負責元數據管理和集群監(jiān)控。

支持主備切換(通過Zookeeper實現高可用)。

RegionServer節(jié)點

負責實際的數據存儲和讀寫操作。

每個RegionServer管理多個Region,每個Region是一個表的一部分。

RegionServer會定期向Master匯報狀態(tài)。

Zookeeper

提供分布式協調服務,用于管理集群的狀態(tài)信息。

存儲HBase的元數據(如表結構、Region分布等)。

實現Master的高可用性和Region的動態(tài)分配。

HDFS

HBase將數據存儲在HDFS中,以保證數據的可靠性和高可用性。

數據以文件的形式存儲在HDFS上,每個Region對應一個或多個HDFS文件。

分析

  1. hbase首先是一個大數據數據庫,所以分布式存儲,并且支持水平擴展,這些就不用多說了
  2. hbase是一個KV數據庫,所以擅長隨機讀寫,但是不支持復雜查詢
  3. hbase是一個列族數據庫,所以擅長大寬表
  4. hbase是一個強一致性數據庫,并支持行級事務
  5. hbase不需要提前定義列,所以支持動態(tài)列,適合存儲稀疏數據
?著作權歸作者所有,轉載或內容合作請聯系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

友情鏈接更多精彩內容