HBase Rowkey設計 1 避免熱點

2021-09-19 15:37:34 字數 875 閱讀 3097

參考資料

hbase中的行按行按字典順序排序。這種優化是為了方便掃瞄而設計的,可以將相關的行以及會被一起讀取的行訪問在臨近位置。但是,設計不良的行鍵是熱點的常見**。當大量客戶端流量指向群集的乙個節點或僅幾個節點時,就會發生熱點。這些可能是讀取,寫入或其他操作。流量超過負責託管該區域的單個機器,就可能導致效能下降並可能導致該區域不可用。這也可能對同一區域伺服器託管的其他區域產生負面影響,因為該主機無法為請求的負載提供服務。設計資料訪問模式非常重要,這樣才能完全均勻地利用集群。

為了避免寫熱點,設計rowkey使得不同行在同乙個region,但是在更多資料情況下,資料應該被寫入集群的多個region,而不是乙個。下面描述了一些避免熱點的常用技術,以及它們的一些優點和缺點。

salting

這裡所說的加鹽不是密碼學中的加鹽,而是在rowkey的前面增加隨機數,具體就是給rowkey分配乙個隨機字首以使得它和之前的rowkey的開頭不同。分配的字首種類數量應該和你想使用資料分散到不同的region的數量一致。加鹽之後的rowkey就會根據隨機生成的字首分散到各個region上,以避免熱點。

hashing

雜湊會使同一行永遠用乙個字首加鹽。雜湊也可以使負載分散到整個集群,但是讀卻是可以**的。使用確定的雜湊可以讓客戶端重構完整的rowkey,可以使用get操作準確獲取某乙個行資料

reversing the key

第三種防止熱點的方法時反轉固定長度或者數字格式的rowkey。這樣可以使得rowkey中經常改變的部分(最沒有意義的部分)放在前面。這樣可以有效的隨機rowkey,但是犧牲了rowkey的有序性。

反轉rowkey的例子以手機號為rowkey,可以將手機號反轉後的字串作為rowkey,這樣的就避免了以手機號那樣比較固定開頭導致熱點問題

rowkey design

HBase RowKey設計原則

對於關係型資料庫,資料定位可以理解為 二維座標 但是hbase中需要四維來定位乙個單元格,即 行健 列族 列限定符 時間戳 hbase中的行是按照rowkey的字典順序排序的,這種設計優化了scan操作,可以將相關的行以及會被一起讀取的行訪問在臨近位置,便於scan。然而糟糕的rowkey設計是熱點...

HBase Rowkey 設計指南

文章目錄 2 rowkey設計技巧 3 rowkey 設計案例剖析 我們常說看一張 hbase 表設計的好不好,就看它的 rowkey 設計的好不好。可見 rowkey 在 hbase 中的地位。那麼 rowkey 到底是什麼?rowkey 的特點如下 如果我們的 rowkey 設計為 uid ph...

HBase Rowkey 設計指南

我們常說看一張 hbase 表設計的好不好,就看它的 rowkey 設計的好不好。可見 rowkey 在 hbase 中的地位。那麼 rowkey 到底是什麼?rowkey 的特點如下 如果我們的 rowkey 設計為 uid phone name,那麼這種設計可以很好的支援以下的場景 難以支援的場...