1. 程式人生 > >HBase資料結構

HBase資料結構

一、NameSpace

名稱空間是類似於關係資料庫系統中的資料庫的概念,他其實是表的邏輯分組。這種抽象為多租戶相關功能奠定了基礎。 名稱空間包含以下四點

(1) 配額管理- 限制名稱空間可以使用的資源量(即區域,表)。

(2) 許可權管理 - 為租戶提供另一級別的安全管理。

(3) RS邏輯組 - 可以將名稱空間/表固定到RegionServers的子集上,從而保證粗略的隔離級別

(4) 表 - 名稱空間中在模式定義時預先宣告表。預設在default空間

名稱空間是可以管理維護的,可以建立,刪除或更改名稱空間。

建立一個名稱空間

create_namespace 'my_ns'

建立表的時候指定一個名稱空間

create 'my_ns:my_table', 'fam'

刪除一個名稱空間

drop_namespace 'my_ns'

修改一個名稱空間

alter_namespace 'my_ns', {METHOD => 'set', 'PROPERTY_NAME' => 'PROPERTY_VALUE'}

HBase有兩個特殊預定義的名稱空間:

  • hbase - 系統名稱空間,用於包含HBase內部表
  • default - 沒有明確指定名稱空間的表將自動落入此名稱空間

二、Table

傳統資料庫一個表的結構如下:

姓名 年齡 性別 成績
liujinghui 18 strong man 100
zhangsan 99 Niangs -1

轉換成HBase資料庫的表結構就如下所示

Info Score
Row_key Info:name Info:age Info:sex Score:name Score:score

//========建立表和列族========//

2.3.3 :016 > create 'School','Info','Score' Created table School Took 0.8136 seconds   

//========建立列族中的列和資料======//

2.3.3 :019 > put 'School','001','Info:name','liujinghui' Took 0.1916 seconds                                                              2.3.3 :020 > put 'School','001','Info:age','18' Took 0.0048 seconds                                                              2.3.3 :021 > put 'School','001','Info:sex','strong man' Took 0.0067 seconds                                                              2.3.3 :022 > put 'School','001','Score:name','liujinghui' Took 0.0057 seconds                                                              2.3.3 :023 > put 'School','001','Score:score','100' Took 0.0042 seconds                                                              2.3.3 :024 > put 'School','002','Info:name','zhangsan' Took 0.0111 seconds                                                              2.3.3 :025 > put 'School','002','Info:age','99' Took 0.0043 seconds                                                              2.3.3 :026 > put 'School','002','Info:sex','Niangs' Took 0.0058 seconds                                                              2.3.3 :027 > put 'School','002','Score:name','zhangsan' Took 0.0024 seconds                                                              2.3.3 :028 > put 'School','002','Score:score','-1' Took 0.0047 seconds  

二、Column Family

列族:HBASE表中的每個列,都歸屬於某個列族。列族是表的schema的一部 分(而列不是),必須在使用表之前定義。列名都以列族作為字首。例如 courses:history,courses:math都屬於courses 這個列族。

三、RowKey

RowKey是記錄的主鍵,訪問一個行只有三種方式

  • 單個RowKey
  • RowKey的正則
  • 全表掃描

RowKey行鍵 (RowKey)可以是任意字串(最大長度是64KB,實際應用中長度一般為 10-100bytes),在HBASE內部,RowKey儲存為位元組陣列。儲存時,資料按照RowKey的字典序(byte order)排序儲存。設計RowKey時,要充分排序儲存這個特性,將經常一起讀取的行儲存放到一起。(位置相關性)

四、Cell

由 rowkey, column Family:columu, version 他們三個引數確定唯一一個Cell

cell中的資料是沒有型別的,全部是位元組碼形式存貯。

注意score只顯示最新的

HBase中的cell 是按版本來儲存的,每個cell都有各種版本的資料,所以當update一個cell中的資料的時候,其實是網cell的末尾追加一個版本的資料,而update之前的資料依然是存在的,這和insert一個新的資料沒有任何的區別,每個family都可以設定每個cell要保留的版本數量,預設是3,由VERSIONS決定。 當使用get或者scan命令檢視資料時候,如果沒有指定版本數則預設是隻取到每個cell最新的版本的資料,如果指定了VERSIONS則顯示其指定的版本數量的資料。

五、Time Stamp

HBASE 中通過rowkey和columns確定的為一個存貯單元稱為cell。每個 cell都儲存 著同一份資料的多個版本。版本通過時間戳來索引。時間戳的型別是 64位整型。時間戳可以由HBASE(在資料寫入時自動 )賦值,此時時間戳是精確到毫秒 的當前系統時間。時間戳也可以由客戶顯式賦值。如果應用程式要避免資料版 本衝突,就必須自己生成具有唯一性的時間戳。每個 cell中,不同版本的資料按照時間倒序排序,即最新的資料排在最前面。

為了避免資料存在過多版本造成的的管理 (包括存貯和索引)負擔,HBASE提供 了兩種資料版本回收方式。一是儲存資料的最後n個版本,二是儲存最近一段 時間內的版本(比如最近七天)。使用者可以針對每個列族進行設定。