1. 程式人生 > >hbase的rowkey設計原則和實現方式

hbase的rowkey設計原則和實現方式

一:hbase的儲存形式

hbase的內部使用KeyValue的形式存在,其key是有rowkey:family:column:logTimevalue是其儲存的內容。

其在region的是大多以升序的形式排列,唯一的是logtime是以降序的形式進行排列。

所以,按照越靠近左邊的資訊越容易被檢索到。其設計時,要考慮把重要的資訊放左邊,不重要的資訊放到右邊。這樣可以提高查詢資料的速度。這樣,最重要的提高索引速度的就是設計合適的rowkey。

二:rowkey的設計原則

1:長度原則,最短越好,最大不能超過64K。太長的影響有兩點,一是極大影響了HFile的儲存效率。二是快取memstore不能得到有效利用,快取不能存放太多的資訊,造成檢索效率的降低。

2:唯一原則

保證rowkey的唯一性,這條沒有什麼要講的。

3:自己一條原則

儘量保證經常一起用的rowkey儲存在同一個region上,有助於提升檢索效率。但要避免熱點問題。

4:對於常用的檢索的rowkey,儘量使用高表(行多列少),二部選擇寬表(列多行少)。

三:rowkey引起熱點問題的集中解決方法

1-加鹽:在rowkey前面加一個冗餘資訊,這樣可以把資料分散到不同的region中。

   優點:可以有效的防止rowkey集中分配到一個或多個region中。有效避免了熱點問題;

   缺點:無形中增加了rowkey的長度範圍檢索

得不到有效使用。

2-欄位交換,提升權重:如果rowkey中含有幾個資訊欄位,可以調整資訊欄位的順序。

   缺點:對於單個資訊欄位,或者無論怎麼調整都會遇到region熱點的rowkey是解決不了的。

3-隨機鍵:把rowkey進行hash化,在分配到不同的伺服器上。和加鹽的方式相似;

以下是順序讀的效能排行(由高到低,寫效能與讀效能相反):順序鍵 -> 使用加鹽鍵 -> 提升欄位鍵  -> 隨機鍵

 

強加幾個知識點:

1-儘量使用範圍查詢代替字首查詢;

2-資料多時,用分頁查詢;