1. 程式人生 > >20 大資料--HTable基本概念

20 大資料--HTable基本概念

從一個示例說起

傳統的關係型資料庫想必大家都不陌生,我們將以一個簡單的例子來說明使用RDBMS和HBase各自的解決方式及優缺點。、

以博文為例,RDBMS的表設計如下:

為了方便理解,我們以一些資料示例下

上面的例子,我們用HBase可以按以下方式設計

同樣為了方便理解,我們以一些資料示例下,同時用紅色標出了一些關鍵概念,後面會解釋

 

HTable一些基本概念

  • Row key

行主鍵, HBase不支援條件查詢和Order by等查詢,讀取記錄只能按Row key(及其range)或全表掃描,因此Row key需要根據業務來設計以利用其儲存排序特性(Table按Row key字典序排序如1,10,100,11,2)提高效能。

  • Column Family(列族)

在表建立時宣告,每個Column Family為一個儲存單元。在上例中設計了一個HBase表blog,該表有兩個列族:article和author。

  • Column(列)

HBase的每個列都屬於一個列族,以列族名為字首,如列article:title和article:content屬於article列族,author:name和author:nickname屬於author列族。
Column不用建立表時定義即可以動態新增,同一Column Family的Columns會群聚在一個儲存單元上,並依Column key排序,因此設計時應將具有相同I/O特性的Column設計在一個Column Family上以提高效能。

  • Timestamp

HBase通過row和column確定一份資料,這份資料的值可能有多個版本,不同版本的值按照時間倒序排序,即最新的資料排在最前面,查詢時預設返回最新版本。如上例中row key=1的author:nickname值有兩個版本,分別為1317180070811對應的“一葉渡江”和1317180718830對應的“yedu”(對應到實際業務可以理解為在某時刻修改了nickname為yedu,但舊值仍然存在)。Timestamp預設為系統當前時間(精確到毫秒),也可以在寫入資料時指定該值。

  • Value

每個值通過4個鍵唯一索引,tableName+RowKey+ColumnKey+Timestamp=>value,例如上例中{tableName=’blog’,RowKey=’1’,ColumnName=’author:nickname’,Timestamp=’ 1317180718830’}索引到的唯一值是“yedu”。

  • 儲存型別

TableName 是字串
RowKey 和 ColumnName 是二進位制值(Java 型別 byte[])
Timestamp 是一個 64 位整數(Java 型別 long)
value 是一個位元組陣列(Java型別 byte[])。