hbase的rowkey設計原則和實現方式
一:hbase的儲存形式
hbase的內部使用KeyValue的形式存在,其key是有rowkey:family:column:logTime,value是其儲存的內容。
其在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-資料多時,用分頁查詢;