从品牌网站建设到网络营销策划,从策略到执行的一站式服务
这篇文章将为大家详细讲解有关HBase存储IM消息中RowKey该怎么设计,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。
站在用户的角度思考问题,与客户深入沟通,找到西丰网站设计与西丰网站推广的解决方案,凭借多年的经验,让设计与互联网技术结合,创造个性化、用户体验好的作品,建站类型包括:网站设计制作、成都做网站、企业官网、英文网站、手机端网站、网站推广、域名注册、网页空间、企业邮箱。业务覆盖西丰地区。
RowKey是HBase表设计中最重要的一个方面,它决定了应用程序与HBase表的交互方式,还会影响您从HBase中提取数据的性能。
一般IM系统的消息,以会话为维度,按照TimeLine模型存储。
以下是IM系统消息存储的RowKey设计
一、RowKey的格式设计
会话ID和消息ID采用snowflake算法生成,RowKey包括了三部分内容。
会话hash值 | 会话id | 逆序消息id
会话hash值的目的为数据分区(region)存储,预分区能够分摊数据读写压力;
会话id确定唯一会话,一个群里的所有消息拥有相同的会话id;
逆序消息id确定唯一消息和拉取最新消息序,逆序确保越新的消息id值越小,IM软件里,总是先显示群里的最新消息,向上滑动界面再加载之前的消息
“|”的作用在为分隔数据位。由于部分id可能长度不是一致(snowflake),所以选用了“|”为分隔,确保能够无歧义的反解出个部分数据。
二、region的分区设计
IM业务特点决定,同一会话的消息,一般会集中读取(用户查看某个聊天的消息就是这种场景)。因此需要把同一会话的消息存储在一个分区。我们采用会话id的hash值来做分区字段,能够确保同一会话的消息一定在同一分区。
会话ID采用了改造后的SnowFlake算法(参看《ID生成策略——SnowFlake》),会话id除以2的n次方,数据都能比较平均的分配(如果id没有这个特性,也可以选用其他hash方式)。
在没有采用HBase存储消息之前,消息使用MySQL存储。采用会话Id%4,分为4个库。如下图
HBase依照rowkey实现同样的分区效果,理论上和分库是一个效果。通过会话Id取模后的128个取值均匀散列到了不同region。
分区值为000—127,预分区效果如下图
采用rowkey前置3位预分区,每一个rowkey到来时,选取与region相同位数的前3位进行匹配,例图中,002|…..|….rowkey会选择3位002进行region匹配,然后把数据放入对应分区。
三、消息存取过程
1、依照上述设计格式,我们用传参后的会话Id,002|***|***取模128—以此分散到不同的region;
2、确定具体region后依照rowkey的后续***|312312312312312312312|***的会话Id确定唯一的会话;
3、确定唯一会话后依照rowkey的后续消息Id确定某一个具体消息***|***|8896232141957373907,注意这个消息Id已经被逆序处理(Long.MAX_VALUE-消息Id),用来做拉取最邻近的消息。
关于HBase存储IM消息中RowKey该怎么设计就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到。
成都网站建设公司地址:成都市青羊区太升南路288号锦天国际A座10层 建设咨询028-86922220
成都快上网科技有限公司-四川网站建设设计公司 | 蜀ICP备19037934号 Copyright 2020,ALL Rights Reserved cdkjz.cn | 成都网站建设 | © Copyright 2020版权所有.
专家团队为您提供成都网站建设,成都网站设计,成都品牌网站设计,成都营销型网站制作等服务,成都建网站就找快上网! | 成都网站建设哪家好? | 网站建设地图