- HBase從入門到實戰
- 張文亮編著
- 1772字
- 2024-12-24 10:45:56
1.7 HBase的數據模型
HBase的數據模型主要包含以下幾個重要概念。
· Name Space(命名空間)。
· Region(區域)。
· Column(列)。
· Column Family(列族)。
· Row(行)。
· Time Stamp(時間戳)。
· Cell(存儲單元)。
下面將逐一介紹這些概念以及它們在HBase中的意義。
1.Name Space
Name Space是指對一組表的邏輯分組(類似于關系數據庫的數據庫概念),以便于對表按業務進行劃分。每個命名空間下可以有多個表。HBase從0.98.0、0.95.2兩個版本開始支持命名空間級別的授權操作。HBase有兩個自帶的命名空間,分別是hbase和default。hbase命名空間中存放的是HBase內置的表,default命名空間中存放的是用戶使用的默認命名空間的表。
2.Region
Region類似于關系數據庫的表的概念。不同的是,HBase定義表時只需要聲明列族即可,不需要聲明具體的列。這意味著,向HBase寫入數據時,字段可以動態、按需指定。因此,與關系數據庫相比,HBase能更加輕松地應對字段需要變更的應用場合。
HBase中的表一般擁有一個到多個Region。當數據量不多時,一個Region足以存儲所有數據。當數據量大時,HBase會拆分Region,并且當HBase在進行負載均衡時,也有可能會從一臺RegionServer上把Region移動到另一臺RegionServer上。
3.Column
HBase中基本的存儲單位是列,一列或者多列形成一行。每列都由列族和列限定符(Column Qualifier)進行限定,例如info:name、info:age。在創建表時,只需指定列族即可,而無須預先定義列限定符。一行可以有3列,而在另一行中可以插入4列數據,也就是說,對于不同的行,列可以完全不一樣。
4.Column Family
在HBase中可以插入不同的行數據,其中列族起到了非常重要的作用。在HBase中,一列或者多列可以組成一個列族。用戶在創建表時不需要指定列,因為列是可以改變的,需要指定的是列族。一個表有幾個列族是一開始就指定好了的。列必須依賴列族而存在,一個沒有列族的表是沒有意義的。不過官方的建議是:一個表中不可有太多的列族,列族越少越好。在HBase中一個列的名稱前面總是帶著它所屬的列族,列名稱的規范格式為“列族:列名”,比如info1:age、info1:name、info2:age、info2:name。列族具有如下幾個特點:
(1)列族必須在創建表的時候定義。
(2)給表指定了列族之后無法再修改。
(3)每個列族中的列數是沒有限制的。
(4)同一列族下的所有列會保存在一起。
(5)列在列族中是有序的。
在實際應用中,列族的控制權限能幫助管理不同類型的應用,例如一些應用允許添加新的基本數據,一些應用只允許瀏覽數據。需要特別注意的是,如果表中包含兩個列族,那么屬于兩個列族的文件保存在相同的節點上,每個列族都會保存在自己的文件集合中。在列族中檢索某列是順序進行的I/O操作。
5.Row
HBase表中每一行的數據都是由一個RowKey和多個Column組成的,而且數據是按照RowKey的字典順序進行存儲的,查詢數據時只能根據RowKey進行檢索,由此可見RowKey的設計十分重要。如圖1-6所示是HBase數據存儲結構。

圖1-6 HBase數據存儲結構
1)RowKey簡介
HBase是一個NoSQL數據庫,它提供的主要操作是增加、刪除、修改、查詢(簡稱增、刪、改、查)。在增、刪、改、查的過程中,RowKey充當了主鍵的作用,它和眾多的NoSQL數據庫一樣,可以唯一地標識一行記錄。
RowKey可以是任意字符串,在HBase內部,RowKey保存為字節數組。存儲時,數據按照RowKey的字典順序存儲。設計RowKey時,要充分利用排序存儲這個特性,將經常一起讀取的行存儲到一起。
2)RowKey的特點
RowKey具有如下幾個特點:
(1)RowKey類似于主鍵,可以唯一地標識一行記錄。如果將數據插入HBase的時候不小心用了之前已經存在的RowKey,則系統會更新之前存在的那一行數據,而之前已經存在的值并不會丟掉,會被放到這個單元格的歷史記錄中,如果需要查詢這個“歷史”值,只需要帶上版本參數就可以找到。
(2)由于數據按照RowKey的字典順序存儲,因此HBase中的數據永遠都是有序的。
(3)HBase在讀寫數據時需要通過RowKey找到對應的Region。在HBase中,一個Region就相當于一個數據分片,每個Region都有起始RowKey和結束RowKey,HBase表中的數據是按照RowKey來分散存儲到不同Region中的。所以在HBase中想要提高查詢速度,就需要設計出優秀的RowKey,RowKey越完美,HBase的效率就越高。
6.Time Stamp
Time Stamp用于標識數據的不同版本號(Version),每條數據寫入時,如果不指定時間戳,系統會自動為其添加該字段,該字段的值即為數據寫入HBase的時間。
7.Cell
列是HBase的基本單位,一個列上可以存儲多個版本的值,多個版本的值被存儲在多個Cell中,多個版本之間用版本號來區分。所以,確定一條數據查詢結果的表達式是行鍵:列族:列:版本號(RowKey:Column Family:Column:Version)。但是,在大部分查詢中,版本號是可以省略的,不寫版本號,HBase會默認獲取最后一個版本的數據。完整的HBase數據存儲結構如圖1-7所示。

圖1-7 HBase數據存儲結構
- 跟“龍哥”學C語言編程
- 人臉識別原理及算法:動態人臉識別系統研究
- Quarkus實踐指南:構建新一代的Kubernetes原生Java微服務
- C++對象模型詳解
- Mastering JavaScript Design Patterns(Second Edition)
- 小程序,巧應用:微信小程序開發實戰(第2版)
- JavaScript悟道
- PHP 8從入門到精通(視頻教學版)
- 程序員必會的40種算法
- Effective C++:改善程序與設計的55個具體做法(第三版)中文版(雙色)
- Natural Language Processing with Python Cookbook
- Learning Zimbra Server Essentials
- Python程序設計
- 利用Python駕馭Stable Diffusion:原理解析、擴展開發與高級應用(智能系統與技術叢書)
- Python網絡運維自動化