1. 程式人生 > >HBase之資料模型(DataModel)

HBase之資料模型(DataModel)

HBase基於Google的BigTable構建,是一種column-orientednosql資料庫

1.模型檢視

1.1概念檢視

從概念模型上看,HBase的儲存邏輯同關係資料庫類似,是基於Table的儲存,儲存檢視如圖所示:


圖中列出了表格的一條記錄,com.cnn.www是該記錄的主鍵,contents:、anchor:cnnsi.com和anchor:my.look.ca是表格的column

與關係資料庫不同的是,這裡的cell具有版本的概念(每個cell有多條記錄,這些記錄通過時間戳來區分彼此).

1.2物理檢視

概念檢視只是基於關係資料庫的一種參照,在真正的物理儲存上,HBase基於另外一種模型,模型檢視如圖所示:

如圖所示,HBase實際上是基於列儲存的資料庫,可簡單認為每個ColumnFamily對應一張儲存表,表格的RowKey、Timestamp和column確定了每條記錄的唯一索引。在物理層面上,表格的資料是通過StoreFile來儲存的,每個StoreFile相當於一個可序列化的Map,Map的key和value都是可解釋型字元陣列,如key的字元陣列主要由以下資訊組成(value於此類似):

rowlength rowKey的字元長度
row rowKey的值
columnFamilyLength columnFamily的字元長度
columnFamily columnFamily的值
columnqualifier column
timestamp 時間戳(版本)
keytype key的型別(Put,Delete,DeleteColumn,DeleteFamily…)
這樣便可從相應的Key/Value鍵值對中提煉出具體的rowKey、timestamp、columnKey和columnValue等資訊。而多個map整合到一起,便形成一張鬆散的、可分散式的、多維的、可序列話的BigTable。

2.模型概念

2.1ColumnFamily

Column Family是一組Column的組合,在HBase中,Schema的定義主要為columnFamily的定義,同大多數nosql資料庫一樣,HBase也是支援SchemaFree的,但是前提要先定義出具體的columnFamily,而在隨後的column定義則沒有任何約束。

其次,HBase的訪問許可權控制,磁碟及記憶體統計等功能都是基於columnFamily層面完成的。

2.2Cell

概念模型中的cell由row、column和timestamp三元素組成

2.3Timestamp

HBase提供基於cell的版本管理功能,版本號預設通過timestamp來標識,並且呈倒敘排列。這樣,最後新增的版本會首先遍歷到

注:這裡的cell指的是概念檢視中