CGFT《大數據技術原理與應用》中的數據模型的相關概念。HBase實際上就是一個稀疏、多維、持久化存儲的映射表,它采用行鍵(Row Key)、列族(Column Family)、列限定符(Column Qualifier)和時間截(Timestamp)進行索引,每個值都未經解釋的字節數組byte[]。下面具體介紹HBase數據模型的相關概念。
1.表
HBase采用表來組織數據,表由行和列組成,列劃分為若干個列族。
2.行
每個HBase表都由若干行組成,每個行由行鍵(Row Key)來標識。訪問表中的行只有3種方式:通過單個行鍵訪問;通過一個行鍵的區間來訪問;全表掃描。行鍵可以是任意字符串(*長度是64KB,實際應用中長度一般為10~100字節),在HBase內部,行鍵保存為字節數組存儲時,數據按照行鍵的字典序排序存儲。在設計行鍵時,要充分考慮這個特性,將經常一起讀取的行存儲在一起。
3.列族
一個HBase表被分組成許多“列族”的集合,它是基本的訪問控制單元。列族需要在表創建時就定義好,數量不能太多(HBase的一些缺陷使得列族數量只限于幾十個),而且不要頻繁修改存儲在一個列族當中的所有數據,通常都屬于同一種數據類型,這通常意味著具有更高的壓縮率表中的每個列都歸屬于某個列族,數據可以被存放到列族的某個列下面,但是,在把數據存放到這個列族的某個列下面之前,必須首先創建這個列族。
在創建完成一個列族以后,就可以使用同一個列族當中的列。列名都以列族作為前級。
例如,courses:history和courses:math這兩個列都屬于courses這個列族。在HBase中,訪問控制、磁盤和內存的使用統計都是在列族層面進行的。實際應用中,我們可以借助列族上的控制權限幫助實現特定的目的,比如,我們可以允許一些應用能夠向表中添加新的數據,而另一些應用則只允許瀏覽數據。HBase列族還可以被配置成支持不同類型的訪問模式,比如,一個列族也可以被設置成放人內存當中,以消耗內存為代價,從而換取更好的響應性能。
4.列限定符
列族里的數據通過列限定符(或列)來定位。列限定符不用事先定義,也不需要在不同行之間保持一致。列限定符沒有數據類型,總被視為字節數組byte[]。
5.單元格
在HBase表中,通過行、列族和列限定符確定一個“單元格”(cell)。單元格中存儲的數據沒有數據類型,總被視為字節數組byte[]。每個單元格中可以保存一個數據的多個版本,每個版本對應一個不同的時間藏。
6.時間截
每個單元格都保存著同一份數據的多個版本,這些版本采用時間截進行索引。每次對一個單元格執行操作(新建、修改、刪除)時、HBase都會隱式地自動生成并存儲一個時間藏。時間截一般是64位整型,可以由用戶自己賦值(自己生成*時間裁可以避免應用程序中出現數據版本沖突),也可以由HBase在數據寫入時自動賦值。一個單元格的不同版本是根據時間藏降序的順序進行存儲的,這樣,*的版本可以被*讀取。

