摘要: 在密碼學中,加鹽是指在散列之前將散列內容(例如:密碼)的任意固定位置插入特定的字符串。這個在散列中加入字符串的方式稱為“加鹽”。其作用是讓加鹽后的散列結果和沒有加鹽的結果不相同,在不同的應用情景中,這個處理可以增加額外的安全性。
1. 什么是加鹽?
在密碼學中,加鹽是指在散列之前將散列內容(例如:密碼)的任意固定位置插入特定的字符串。這個在散列中加入字符串的方式稱為“加鹽”。其作用是讓加鹽后的散列結果和沒有加鹽的結果不相同,在不同的應用情景中,這個處理可以增加額外的安全性。而Phoenix中加鹽是指對pk對應的byte數組插入特定的byte數據。
2. 加鹽能解決什么問題?
加鹽能解決HBASE讀寫熱點問題,例如:單調遞增rowkey數據的持續寫入,使得負載集中在某一個RegionServer上引起的熱點問題。
3. 怎么對表加鹽?
在創建表的時候指定屬性值:SALT_BUCKETS,其值表示所分buckets(region)數量, 范圍是1~256。
CREATE TABLE table (key VARCHAR PRIMARY KEY, col VARCHAR) SALT_BUCKETS = 8;
4. 加鹽的原理是什么?
加鹽的過程就是在原來key的基礎上增加一個byte作為前綴,計算公式如下:
new_row_key = (++index % BUCKETS_NUMBER) + original_key
下圖展示了自增rowkey通過加鹽被打散寫入到各個region中的過程:
5. 一個表“加多少鹽合適”?
- 當可用block cache的大小小於表數據大小時,較優的slated bucket是和region server數量相同,這樣可以得到更好的讀寫性能。
- 當表的數量很大時,基本上會忽略blcok cache的優化收益,大部分數據仍然需要走磁盤IO。比如對於10個region server集群的大表,可以考慮設計64~128個slat buckets。
6. 加鹽時需要注意
- 創建加鹽表時不能再指定split key。
- 太大的slated buckets會減小range查詢的靈活性,甚至降低查詢性能。
References
轉自:https://yq.aliyun.com/articles/532313
交流
如果大家對HBase有興趣,致力於使用HBase解決實際的問題,歡迎加入Hbase技術社區群交流:
微信HBase技術社區群,假如微信群加不了,可以加秘書微信: SH_425 ,然后邀請您。
釘釘HBase技術社區群

