首頁 > 軟體

詳解HBase表的資料模型

2022-05-17 19:00:29

HBase是執行在Hadoop叢集上的一個資料庫,與傳統的資料庫有嚴格的ACID(原子性、一致性、隔離性、永續性)要求不一樣,HBase降低了這些要求從而獲得更好的擴充套件性,它更適合儲存一些非結構化和半結構化的資料。

下面給大家詳細介紹HBase表的資料模型,內容如下所示:

表(Table)

HBase 中的資料以表的形式儲存。同一個表中的資料通常是相關的,使用表主要是可以把某些列組織起來一起存取。表名作為 HDFS 儲存路徑的一部分來使用,在 HDFS 中可以看到每個表名都作為獨立的目錄結構。

HBase表的資料模型主要概念包括rowkey、Column Family、Column、cell、Timestamp。

1. rowkey行鍵

  • table的主鍵,table中的記錄==按照rowkey 的字典序進行排序==
  • rowkey行鍵可以是任意字串(最大長度是 64KB,實際應用中長度一般為 10-100bytes)

2. Column Family列族

  • 被稱為列族或列簇
  • HBase表中的每個列,都歸屬與某個列族
  • 列族是表的schema的一部分(而列不是),即建表時至少指定一個列族
  • 比如建立一張表,名為user,有兩個列族,分別是userInfoaddressInfo,建表語句create 'user', 'userInfo', 'addressInfo'

3. Column列

  • 列肯定是表的某一列族下的一個列,用列族名:列名表示,如userInfo列族下的name列,表示為userInfo:name
  • 它屬於某一個ColumnFamily,類似於我們mysql當中建立的具體的列

4. cell單元格

  • 知道row key行鍵、列族、列,可以確定的一個cell單元格

  • cell中的資料是沒有型別的,全部是以位元組陣列進行儲存

5. Timestamp時間戳

  • 可以對錶中的Cell多次賦值,每次賦值操作時的時間戳timestamp,可看成Cell值的版本號version number
  • 即一個Cell可以有多個版本的值

理解資料模型各概念的圖

上表展示的是 HBase 中的使用者資訊表 user,有三行記錄和兩個列族(不考慮空白的列族,代表可以有很多列族),行鍵分別為 1、2 和 3,兩個列族分別為 userInfo 和 addressInfo,每個列族中含有若干列,如列族 userInfo 包括 name、age、sex 3列,列族 addressInfo 包括 address、from、phone、email、ralary 5列。

在 HBase 中,列不是固定的表結構,在建立表時,不需要預先定義列名,可以在插入資料時臨時建立。

從表的邏輯模型來看,HBase 表與關係型資料庫中的表結構之間好像沒什麼差別,只不過多了列族的概念。但實際上是有很大差別的,關係型資料庫中表的結構需要預先定義,如:列名及其資料型別和值域等內容。

當需要新增新列,則需要修改表結構,這會對已有的資料產生很大影響。同時,關係型資料庫中的表為每個列預留了儲存空間,即表中的空白 Cell 資料在關係型資料庫中以“NULL”值佔用儲存空間。因此,對稀疏資料來說,關係型資料庫表中就會產生很多“NULL”值,消耗大量的儲存空間。

與面向行儲存的關係型資料庫不同,HBase 是面向列儲存的,且在實際的物理儲存中,列族是分開儲存的,即表中的使用者資訊表將被儲存為 userInfo 和 addressInfo 兩個部分。

同時HBase存在時間戳,可以多次對一個cell賦值,可以儲存多個版本的值,如上表中rowkey為1的資料儲存了2個時間版本的資料。

到此這篇關於詳解HBase表的資料模型的文章就介紹到這了,更多相關HBase資料模型內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!


IT145.com E-mail:sddin#qq.com