1. 程式人生 > >hbase實踐之Rowkey設計之道

hbase實踐之Rowkey設計之道

筆者從一開始接觸hbase就在思考rowkey設計,希望rowkey設計得好,能夠支援查詢的需求。使用hbase一段時間後,再去總結一些hbase的設計方法,無外乎以下幾種:

  • reverse
  • salt
  • hash

本質上都是避免熱點問題。那麼如何根據查詢場景設計rowkey?rowkey設計之道是什麼?

rowkey設計之道

image

hbase通過分治策略將資料分散到1-N個Region中,以滿足業務的讀寫需求,合理的分配是關鍵,這就涉及rowkey的設計。

image

image
拋開快取,只從rowke的角度來考慮讀寫,如果追求讀取高效,則希望查詢時的資料是相對集中的,掃描範圍比較小;如果寫入比較大,更多的是靠叢集的效能來支撐,對負載均衡要求比較高,也就是要最大化發揮叢集的效能。

image
rowkey的設計,主要是根據查詢的需求來設計。

  1. 收集各種查詢需求與時延要求
  2. 解決最主要的矛盾:最高頻查詢場景是什麼?
  3. 其他的查詢場景和頻度?

接下來進一步細化:如各種查詢中是否多維查詢?等等

image
梳理資料的特點,可以將理論與實踐更好的結合。如果不知道資料的分佈特點,僅僅根據欄位的情況來設計rowkey,會出現這種情況:

我們根據省份這個欄位進行hash,將資料分散到不同的region,但問題是我們的使用者很可能就是集中在某幾個省份,像江浙滬這種經濟發達的大省,這種rowkey的設計,就是忽略了資料分佈的特點,造成了熱點問題。其他忽略資料分佈的特點,還容易造成資料分析過程中的資料傾斜問題。

所以在rowkey設計中要注意資料的分佈特點,同時考慮資料的生命週期。

rowkey索引設計

二級索引

image

組合索引

image

image

rowkey索引設計,是rowkey設計之術。

小結

rowkey設計之術,只見樹木不見森林,很容易讓人迷茫。從rowkey設計之道出發,讓我們不再徘徊。

參考文獻