Hbase 學習(七) rowkey設計

2021-09-08 09:41:15 字數 643 閱讀 7760

一直以來對rowkey的設計都比較迷茫,《hbase權威指南》倒是給出了個還算靠譜的例子。

下面這個例子有點兒像帖子表結構,它的rowkey設計是這樣的,可以簡單的理解為,什麼人在什麼時間發了什麼資訊,資訊包括什麼附件,它是使用者為主線的乙個設計。

---如果我們想查某個使用者發的資訊,我們可以設定scan的start rowkey 為該userid,end rowkey為userid+1即可。

當我們要查某個使用者某天發了什麼資訊,我們可以使用-來搜尋該使用者所有的帖子。

當我們要查某個具體的帖子的內容,rowkey過濾--即可。

所以rowkey的設計是要看具體的應用的。

上面這個例子沒有考慮熱點的問題,實際上每個使用者的帖子被訪問的熱度是不一樣的,有些帖子被大量訪問,有的無人問津。

那怎麼辦呢?有的書上寫,在前面加0-n的隨機數,random % 機器數 。但是這樣子的話,以後你想取某個使用者的userid的時候只能開

多執行緒去訪問了,因為你不能逆推出來它的rowkey。在和支付寶的工程獅聊了一下,他們是這樣處理的取md5(userid)的前4位

+reverse(userid)這個樣子來處理userid,這樣子的話,能解決熱點的問題,也可以逆推出來rowkey。

Hbase學習(七) Rowkey的設計

rowkey長度原則 rowkey是乙個二進位製碼流,可以是任意字串,最大長度 64kb 實際應用中一般為10 100bytes,以 byte 形式儲存,一般設計成定長。建議越短越好,不要超過16個位元組,原因如下 資料的持久化檔案hfile中是按照keyvalue儲存的,如果rowkey過長,比如...

Hbase學習筆記 rowkey

案例 reliable and scalable data ingestion at airbnb apache hbase at airbnb airbnb軟體工程師丁辰 airbnb的streaming etl 在airbnb的rowkey設計案例中,使用了hash法避免了寫入熱點問題,其中 e...

HBase學習之HBase的RowKey設計原則

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