hbase的rowKey設計原則

2022-09-19 02:09:08 字數 1399 閱讀 9884

**

訪問hbase table中的行,只有三種方式:

1 通過單個row key訪問

2 通過row key的range

3 全表掃瞄

可以看出rowkey設計的好與壞直接決定了查詢速度,在hbase中快速定位也是依靠布隆過濾器,然而布隆過濾器依靠的就是rowkey,所以設計乙個好的row可以省不少事情。

但是下面列出的方式緊緊是提供一種設計原則,最重要的還是要具體問題具體分析,然後設計出比較符合業務內容的rowkey.

rowkey是乙個二進位製碼流,可以是任意字串,最大長度64kb,實際應用中一般為10-100bytes,以byte形式儲存,一般設計成定長。議越短越好,不要超過16個位元組,設計過長會降低memstore記憶體的利用率和hfile存貯資料的效率。

這個需要著重說一下,首先一條資料是根據rowkey來當成索引的,如果過長就會快速佔據memstore的128m,然後被刷寫到磁碟,也就是說相同的空間存貯的內容被rowkey佔據了一大部分,減少了主要內容的存貯

建議將rowkey的高位作為雜湊字段,這樣將提高資料均衡分布在每個regionserver,以實現負載均衡的機率。如果沒有雜湊字段,首字段直接是時間資訊。

所有的資料都會集中在乙個regionserver上,這樣在資料檢索的時候負載會集中在個別的regionserver上,造成熱點問題,會降低查詢效率。

必須在設計上保證其唯一性,rowkey是按照字典順序排序儲存的,

因此,設計rowkey的時候,要充分利用這個排序的特點,可以將經常讀取的資料儲存到一塊,將最近可能會被訪問的資料放到一塊。

1.什麼是熱點

檢索habse的記錄首先要通過row key來定位資料行。當大量的client訪問hbase集群的乙個或少數幾個節點,造成少數region server的讀/寫請求過多、負載過大,而其他region server負載卻很小,就造成了「熱點」現象。

2.熱點的解決辦法

2.1預分割槽

預分割槽的目的讓表的資料可以均衡的分散在集群中,而不是預設只有乙個region分布在集群的乙個節點上。

2.2加鹽

這裡所說的加鹽不是密碼學中的加鹽,而是在rowkey的前面增加隨機數,具體就是給rowkey分配乙個隨機字首以使得它和之前的rowkey的開頭不同。

2.3雜湊

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

2.4反轉

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

rowkey既想要能夠快速檢索,就想要內容最好集中到少量的region中,但是一旦集中了,就會產生熱點問題,所以,他們是相伴相

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設計原則

hbase是三維有序儲存的,通過rowkey 行鍵 column key column family和qualifier 和timestamp 時間戳 這個三個維度可以對hbase中的資料進行快速定位。hbase中rowkey可以唯一標識一行記錄,在hbase查詢的時候,有兩種方式 1 通過get方...