官术网_书友最值得收藏!

  • 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數據存儲結構

主站蜘蛛池模板: 林芝县| 岳阳市| 萍乡市| 聂拉木县| 五寨县| 淮南市| 镇康县| 道真| 磐石市| 奈曼旗| 彰武县| 龙井市| 枝江市| 惠水县| 辉县市| 洞头县| 壶关县| 屯留县| 大名县| 前郭尔| 工布江达县| 大理市| 婺源县| 清河县| 安国市| 巴东县| 富蕴县| 乡城县| 盘锦市| 罗平县| 吉木萨尔县| 松溪县| 博湖县| 浏阳市| 牟定县| 屏边| 虹口区| 贺州市| 通州市| 和静县| 海原县|