真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

HBase存儲(chǔ)IM消息中RowKey該怎么設(shè)計(jì)

這篇文章將為大家詳細(xì)講解有關(guān)HBase存儲(chǔ)IM消息中RowKey該怎么設(shè)計(jì),文章內(nèi)容質(zhì)量較高,因此小編分享給大家做個(gè)參考,希望大家閱讀完這篇文章后對(duì)相關(guān)知識(shí)有一定的了解。

站在用戶的角度思考問題,與客戶深入溝通,找到西豐網(wǎng)站設(shè)計(jì)與西豐網(wǎng)站推廣的解決方案,憑借多年的經(jīng)驗(yàn),讓設(shè)計(jì)與互聯(lián)網(wǎng)技術(shù)結(jié)合,創(chuàng)造個(gè)性化、用戶體驗(yàn)好的作品,建站類型包括:網(wǎng)站設(shè)計(jì)制作、成都做網(wǎng)站、企業(yè)官網(wǎng)、英文網(wǎng)站、手機(jī)端網(wǎng)站、網(wǎng)站推廣、域名注冊(cè)、網(wǎng)頁空間、企業(yè)郵箱。業(yè)務(wù)覆蓋西豐地區(qū)。

RowKey是HBase表設(shè)計(jì)中最重要的一個(gè)方面,它決定了應(yīng)用程序與HBase表的交互方式,還會(huì)影響您從HBase中提取數(shù)據(jù)的性能。

一般IM系統(tǒng)的消息,以會(huì)話為維度,按照TimeLine模型存儲(chǔ)。

以下是IM系統(tǒng)消息存儲(chǔ)的RowKey設(shè)計(jì)

一、RowKey的格式設(shè)計(jì)

會(huì)話ID和消息ID采用snowflake算法生成,RowKey包括了三部分內(nèi)容。

會(huì)話hash值 | 會(huì)話id | 逆序消息id  

HBase存儲(chǔ)IM消息中RowKey該怎么設(shè)計(jì)

會(huì)話hash值的目的為數(shù)據(jù)分區(qū)(region)存儲(chǔ),預(yù)分區(qū)能夠分?jǐn)倲?shù)據(jù)讀寫壓力;

會(huì)話id確定唯一會(huì)話,一個(gè)群里的所有消息擁有相同的會(huì)話id;

逆序消息id確定唯一消息和拉取最新消息序,逆序確保越新的消息id值越小,IM軟件里,總是先顯示群里的最新消息,向上滑動(dòng)界面再加載之前的消息

“|”的作用在為分隔數(shù)據(jù)位。由于部分id可能長度不是一致(snowflake),所以選用了“|”為分隔,確保能夠無歧義的反解出個(gè)部分?jǐn)?shù)據(jù)。

二、region的分區(qū)設(shè)計(jì)

IM業(yè)務(wù)特點(diǎn)決定,同一會(huì)話的消息,一般會(huì)集中讀?。ㄓ脩舨榭茨硞€(gè)聊天的消息就是這種場(chǎng)景)。因此需要把同一會(huì)話的消息存儲(chǔ)在一個(gè)分區(qū)。我們采用會(huì)話id的hash值來做分區(qū)字段,能夠確保同一會(huì)話的消息一定在同一分區(qū)。

會(huì)話ID采用了改造后的SnowFlake算法(參看《ID生成策略——SnowFlake》),會(huì)話id除以2的n次方,數(shù)據(jù)都能比較平均的分配(如果id沒有這個(gè)特性,也可以選用其他hash方式)。

在沒有采用HBase存儲(chǔ)消息之前,消息使用MySQL存儲(chǔ)。采用會(huì)話Id%4,分為4個(gè)庫。如下圖

HBase存儲(chǔ)IM消息中RowKey該怎么設(shè)計(jì)

HBase依照rowkey實(shí)現(xiàn)同樣的分區(qū)效果,理論上和分庫是一個(gè)效果。通過會(huì)話Id取模后的128個(gè)取值均勻散列到了不同region。

HBase存儲(chǔ)IM消息中RowKey該怎么設(shè)計(jì)

分區(qū)值為000—127,預(yù)分區(qū)效果如下圖

HBase存儲(chǔ)IM消息中RowKey該怎么設(shè)計(jì)

采用rowkey前置3位預(yù)分區(qū),每一個(gè)rowkey到來時(shí),選取與region相同位數(shù)的前3位進(jìn)行匹配,例圖中,002|…..|….rowkey會(huì)選擇3位002進(jìn)行region匹配,然后把數(shù)據(jù)放入對(duì)應(yīng)分區(qū)。

三、消息存取過程

1、依照上述設(shè)計(jì)格式,我們用傳參后的會(huì)話Id,002|***|***取模128—以此分散到不同的region;

2、確定具體region后依照rowkey的后續(xù)***|312312312312312312312|***的會(huì)話Id確定唯一的會(huì)話;

3、確定唯一會(huì)話后依照rowkey的后續(xù)消息Id確定某一個(gè)具體消息***|***|8896232141957373907,注意這個(gè)消息Id已經(jīng)被逆序處理(Long.MAX_VALUE-消息Id),用來做拉取最鄰近的消息。 

關(guān)于HBase存儲(chǔ)IM消息中RowKey該怎么設(shè)計(jì)就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,可以學(xué)到更多知識(shí)。如果覺得文章不錯(cuò),可以把它分享出去讓更多的人看到。


當(dāng)前題目:HBase存儲(chǔ)IM消息中RowKey該怎么設(shè)計(jì)
文章鏈接:http://weahome.cn/article/ieisoj.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部