Hbase 學習(七) rowkey設計

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

下面這個例子有點兒像帖子表結構,它的rowkey設計是這樣的,能夠簡單的理解爲,什麼人在什麼時間發了什麼信息,信息包括什麼附件,它是用戶爲主線的一個設計。spa

<userId>-<date>-<messageId>-<attachmentId>設計

若是咱們想查某個用戶發的信息,咱們能夠設置scan的start rowkey 爲該userId,end rowkey爲userId+1便可。orm

當咱們要查某個用戶某天發了什麼信息,咱們能夠使用<userId>-<date>來搜索該用戶全部的帖子。md5

當咱們要查某個具體的帖子的內容,rowkey過濾<userId>-<date>-<messageId>便可。支付寶

因此rowkey的設計是要看具體的應用的。it

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

那怎麼辦呢?有的書上寫,在前面加0-n的隨機數,random % 機器數 。可是這樣子的話,之後你想取某個用戶的userId的時候只能程去訪問了,由於你不能逆推出來它的rowkey。在和支付寶的工程獅聊了一下,他們是這樣處理的取md5(userId)的前4位+reverse(userId)這個樣子來處理userId,這樣子的話,能解決熱點的問題,也能夠逆推出來rowkey。date

相關文章
相關標籤/搜索