天天看點

Hbase 學習(七) rowkey設計

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

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

<b>&lt;userid&gt;-&lt;date&gt;-&lt;messageid&gt;-&lt;attachmentid&gt;</b>

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

當我們要查某個使用者某天發了什麼資訊,我們可以使用&lt;userid&gt;-&lt;date&gt;來搜尋該使用者所有的文章。

當我們要查某個具體的文章的内容,rowkey過濾&lt;userid&gt;-&lt;date&gt;-&lt;messageid&gt;即可。

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

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

那怎麼辦呢?有的書上寫,在前面加0-n的随機數,random % 機器數 。但是這樣子的話,以後你想取某個使用者的userid的時候隻能開多線程去通路了,因為你不能逆推出來它的rowkey。在和支付寶的工程獅聊了一下,他們是這樣處理的取md5(userid)的前4位+reverse(userid)這個樣子來處理userid,這樣子的話,能解決熱點的問題,也可以逆推出來rowkey。

繼續閱讀