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個版本,二是儲存最近一段 時間內的版本(比如最近七天)。使用者可以針對每個列族進行設定。