1. 程式人生 > >HBase資料庫與關係型資料庫的區別(取材於官方文件)

HBase資料庫與關係型資料庫的區別(取材於官方文件)

HBase 資料被建模為多維對映,其中值(表單元)通過 個鍵索引:

value = Map(TableName, RowKey, ColumnKey, Timestamp)

其中:

TableName 是一個字串。 是表名。

RowKey 和 ColumnKey 是二進位制值(Java 型別 byte[])。 代表行健和列族。

Timestamp 是一個 64 位整數(Java 型別 long)。 

value 是一個未解釋的位元組陣列(Java™ 型別 byte[])。 

二進位制資料被編碼為 Base64,以便通過網路傳輸。

行鍵是表的主鍵,通常是一個字串。行通過行鍵按字典順序排序。

儲存在表中的資訊的結構為列族(column family,就相當於列名),您可以將這種結構視為類別。每個列族可以擁有任意數量的成員,它們通過標籤(或修飾符)識別。column 鍵(就是每列的值)由族名、:號和標籤組成。例如,對於系列name 和成員 first,列鍵為 name: first。

(這裡不是很好理解,看了下面的圖可能就比較容易理解了,這個跟資料庫有區分,可見,這裡一行,不代表就一組資料,往往是多組資料的,一個rowkey可能對應多列的值,而每列的值(可以視為columnkey)是由列族名:標籤組成),又如,name:last也是一個成員,他們都在於00001行鍵上,是00001行鍵的成員,成員值,就是

value

一個 HBase 表模式定義多個列族,但當您向表中插入一行時,應用程式能夠在執行時建立新成員。對於一個列族,表中的不同行可以擁有不同數量的成員。換句話說,HBase 支援一個動態模式 模型。

參考下圖更好理解

其實這些記錄在hbase是根據TimeStamp排序的,所以這雖然上圖看起來很工整,但是實際上載資料庫裡存放是凌亂的。000001000002的成員交錯著放,唯一定義一個成員的唯一值的行鍵+列族:標籤。

以第一個成員為例:

000001是行鍵,列族是namecontact,列鍵(column鍵)是name:first name:lastcontact:http   Value值就是

JeffreyDean,還有research.google.com/people/jeff….

對於任意行,一次只能訪問一個列族的一個成員(這與關係資料庫不同,在關係資料庫中,一個查詢可以訪問來自一個行中的多個列的單元)。您可以將一個行中的一個列族的成員視為子行。(這個是因為一行可以對應多組成員所定,跟資料庫最大的不同在於此吧)

表被分解為多個表區域,等同於 Bigtable 片(tablet)。一個區域包含某個範圍中的行。將一個表分解為多個區域是高效處理大型表的關鍵機制。