hbase實踐之Rowkey設計之道

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

  • reverse
  • salt
  • hash

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

rowkey設計之道

image

hbase經過分治策略將數據分散到1-N個Region中,以知足業務的讀寫需求,合理的分配是關鍵,這就涉及rowkey的設計。負載均衡

image

image
拋開緩存,只從rowke的角度來考慮讀寫,若是追求讀取高效,則但願查詢時的數據是相對集中的,掃描範圍比較小;若是寫入比較大,更多的是靠集羣的性能來支撐,對負載均衡要求比較高,也就是要最大化發揮集羣的性能。nosql

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

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

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

image
梳理數據的特色,能夠將理論與實踐更好的結合。若是不知道數據的分佈特色,僅僅根據字段的狀況來設計rowkey,會出現這種狀況:3d

咱們根據省份這個字段進行hash,將數據分散到不一樣的region,但問題是咱們的用戶極可能就是集中在某幾個省份,像江浙滬這種經濟發達的大省,這種rowkey的設計,就是忽略了數據分佈的特色,形成了熱點問題。其餘忽略數據分佈的特色,還容易形成數據分析過程當中的數據傾斜問題。blog

因此在rowkey設計中要注意數據的分佈特色,同時考慮數據的生命週期。索引

rowkey索引設計

二級索引

image

組合索引

image

image

rowkey索引設計,是rowkey設計之術。生命週期

小結

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

參考文獻

相關文章
相關標籤/搜索