筆者從一開始接觸hbase就在思考rowkey設計,希望rowkey設計得好,能夠支援查詢的需求。使用hbase一段時間後,再去總結一些hbase的設計方法,無外乎以下幾種:
本質上都是避免熱點問題。那麼如何根據查詢場景設計rowkey?rowkey設計之道是什麼?
hbase通過分治策略將資料分散到1-n個region中,以滿足業務的讀寫需求,合理的分配是關鍵,這就涉及rowkey的設計。
拋開快取,只從rowke的角度來考慮讀寫,如果追求讀取高效,則希望查詢時的資料是相對集中的,掃瞄範圍比較小;如果寫入比較大,更多的是靠集群的效能來支撐,對負載均衡要求比較高,也就是要最大化發揮集群的效能。
rowkey的設計,主要是根據查詢的需求來設計。
收集各種查詢需求與時延要求
解決最主要的矛盾:最高頻查詢場景是什麼?
其他的查詢場景和頻度?
接下來進一步細化:如各種查詢中是否多維查詢?等等
梳理資料的特點,可以將理論與實踐更好的結合。如果不知道資料的分布特點,僅僅根據欄位的情況來設計rowkey,會出現這種情況:
我們根據省份這個字段進行hash,將資料分散到不同的region,但問題是我們的使用者很可能就是集中在某幾個省份,像江浙滬這種經濟發達的大省,這種rowkey的設計,就是忽略了資料分布的特點,造成了熱點問題。其他忽略資料分布的特點,還容易造成資料分析過程中的資料傾斜問題。
所以在rowkey設計中要注意資料的分布特點,同時考慮資料的生命週期。
rowkey索引設計,是rowkey設計之術。
rowkey設計之術,只見樹木不見森林,很容易讓人迷茫。從rowkey設計之道出發,讓我們不再徘徊。
HBase學習之HBase的RowKey設計原則
hbase是三維有序儲存的,通過rowkey 行鍵 column key column family和qualifier 和timestamp 時間戳 這個三個維度可以對hbase中的資料進行快速定位。hbase中rowkey可以唯一標識一行記錄,在hbase查詢的時候,有以下幾種方式 通過get方...
Hbase之Rowkey設計原則
hbase是三維有序儲存的,通過rowkey 行鍵 column key column family和qualifier 和timestamp 時間戳 這個三個維度可以對hbase中的資料進行快速定位。hbase中rowkey可以唯一標識一行記錄,在hbase查詢的時候,有以下幾種方式 通過get方...
Hbase學習筆記 rowkey
案例 reliable and scalable data ingestion at airbnb apache hbase at airbnb airbnb軟體工程師丁辰 airbnb的streaming etl 在airbnb的rowkey設計案例中,使用了hash法避免了寫入熱點問題,其中 e...