一种残膜回收机防缠绕挑膜装置的制 一种秧草收获机用电力驱动行走机构

一种即时通信IM聊天数据存储读写交互的方法与流程

2022-11-30 14:52:31 来源:中国专利 TAG:

一种即时通信im聊天数据存储读写交互的方法
1.技术领域
2.本发明涉及的是及时通信技术领域,具体涉及一种即时通信im聊天数据存储读写交互的方法。


背景技术:

3.即时通讯(instant messaging)是目前internet上最为流行的通讯方式,允许两人或多人使用网络实时的传递文字消息、文件、语音与视频交流。im系统中最核心的部分是消息系统,消息系统中最核心的功能是消息的同步和存储,服务器会自动对im系统聊天窗口发送和接收到的消息进行保存,形成聊天记录并保存在关系型数据库中,随着用户的不断增多,聊天数据也随之呈现海量的增多,单一的查询效率也会随之降低,为用户可以快速拉取和查看自己的聊天记录,需要一个合理的聊天数据设计和存储介质。
4.基本原理:1:用户客户端登陆im系统;2:查询用户列表;3:查询需要聊天的用户,进入会话,查询用户聊天历史消息;4:发送聊天消息;5:服务器存储聊天消息,并推送消费到接受人客户端 技术手段:1:使用netty搭建im系统。
5.2:mysql用于聊天信息,聊天列表信息,用户信息存储。
6.方法步骤:1:用户客户端登陆im系统,建立自己的独有通讯通道;2:从mysql中查询用户列表,查询需要聊天的用户,进入会话,查询用户聊天历史消息;3:用户发送消息,im系统接收消息,并查找用户所在im系统把请求转移到对应的im系统中,给接收方推送消息。
7.4:将聊天信息保存mysql,方便历史消息和未读消息查询。
8.数据结构:历史消息mysql:会话id|消息自增id|消息类型|内容|创建时间时间;未读消息mysql:会话id|消息id|用户id|是否已读|;会话列表mysql:会话id|用户id |。
9.随着互联网的发展,针对传统行业和互联网行业中即时通讯越发重要,各种各样的即时通讯软件也层出不穷;即时通讯im系统也提供了越来越丰富的通讯功能,但是目前im系统的聊天数据存储大都使用关系型数据库存储,对于历史消息的查询,随着数据量的增大查询速度也会随之变慢。
10.综上所述,本发明设计了一种即时通信im聊天数据存储读写交互的方法。


技术实现要素:

11.针对现有技术上存在的不足,本发明目的是在于提供一种即时通信im聊天数据存储读写交互的方法,实现了聊天记录的通用存储设计,快速历史消息和未读消息读取。
12.为了实现上述目的,本发明是通过如下的技术方案来实现:一种即时通信im聊天数据存储读写交互的方法,包括以下步骤:1:用户登陆im系统,建立属于自己的独有通讯通道。并且从mysql拉取自己的会话列表。
13.2:用户选择需要建立聊天的用户,进入聊天会话,从redis中拉取未读消息。
14.3:用户发起聊天消息4:消息到达服务器后,根会话id计算rowkey,把需要推送的消息通过mq广播到所有im服务器,如果服务器有该用户专有通讯通道直接推送消息,并且保存联系消息到hbase中,如果没有专有通道,说明用户不在线,此时消息需要保留一份未读消息到redis中设置有效期,并且同步保存联系消息到hbase中。
15.所述的步骤4采用以下数据结构:hbase历史消息:自定义rowkey|消息类型|内容|创建时间时间|发送人|会话|redis未读消息:zset{key:用户id| valuejson={消息类型|内容|创建时间时间}| score:rowkey}会话列表mysql:会话id|用户id |。
16.所述的步骤4采用了rowkey结构:hbase存储im消息,rowkey设计;会话 | 会话id | 逆序消息id;会话取模值的目的为数据分区(region)存储,预分区能够分摊数据读写压力;会话id确定唯一会话,一个群里的所有消息拥有相同的会话id;逆序消息id确定唯一消息和拉取最新消息序,逆序确保越新的消息id值越小,im软件里,总是先显示群里的最新消息,向上滑动界面再加载之前的消息。
17.本发明具有以下有益效果:1、mysql仅用户信息和会话列表存储,把历史消息的查询从mysql转移到hbase,减轻了mysql的查询压力,redis来承载消息有效期内的写扩展。
18.2、历史消息设计充分利用的hbase数据天然有序,基于rowkeyascil顺序排列,分布式、可伸缩的大数据存储,rowkey查询性能高的特性。
19.3、统一rowkey设计配合hbase的rowkeyascil排序,查询只需要根据rowkey查询。
附图说明
20.下面结合附图和具体实施方式来详细说明本发明;图1为本发明的方法流程图。
21.具体实施方式
22.为使本发明实现的技术手段、创作特征、达成目的与功效易于明白了解,下面结合具体实施方式,进一步阐述本发明。
23.参照图1,本具体实施方式采用以下技术方案:一种即时通信im聊天数据存储读写交互的方法,包括以下步骤:1:用户登陆im系统,建立属于自己的独有通讯通道。并且从mysql拉取自己的会话列表。
24.2:用户选择需要建立聊天的用户,进入聊天会话,从redis中拉取未读消息。
25.3:用户发起聊天消息4:消息到达服务器后,根会话id计算rowkey,把需要推送的消息通过mq广播到所有im服务器,如果服务器有该用户专有通讯通道直接推送消息,并且保存联系消息到hbase中,如果没有专有通道,说明用户不在线,此时消息需要保留一份未读消息到redis中设置有效期,并且同步保存联系消息到hbase中。
26.数据结构:hbase历史消息:自定义rowkey|消息类型|内容|创建时间时间|发送人|会话|redis未读消息:zset{key:用户id| valuejson={消息类型|内容|创建时间时间}| score:rowkey}会话列表mysql:会话id|用户id |。
27.rowkey结构:hbase存储im消息,rowkey设计;会话 | 会话id | 逆序消息id;会话取模值的目的为数据分区(region)存储,预分区能够分摊数据读写压力;会话id确定唯一会话,一个群里的所有消息拥有相同的会话id;逆序消息id确定唯一消息和拉取最新消息序,逆序确保越新的消息id值越小,im软件里,总是先显示群里的最新消息,向上滑动界面再加载之前的消息。
28.本具体实施方式采用:java编程技术,netty搭建im服务器,hbase存储聊天信息,redis数据有效期内多写,mq广播实时查找需要推送用户,mysql存储用户信息,聊天列表信息(会话列表)。
29.本具体实施方式hbase保存聊天信息,redis同步未读消息,未读消息临时缓存,实现消息写扩展;推送的消息通过mq广播到所有im服务器,不需要专门记录用户在某台im系统上有专有通道,推送消息异步处理;mysql仅用户信息和会话列表存储,减少mysql的存储数据量。
30.实施例1:查询举例:查询会话消息:107101127scan "message",{startrow =》 '107101127' ,endrow =》 '107101127~' , formatter =》 'jsonstring'}。
31.以上显示和描述了本发明的基本原理和主要特征和本发明的优点。本行业的技术人员应该了解,本发明不受上述实施例的限制,上述实施例和说明书中描述的只是说明本发明的原理,在不脱离本发明精神和范围的前提下,本发明还会有各种变化和改进,这些变化和改进都落入要求保护的本发明范围内。本发明要求保护范围由所附的权利要求书及其等效物界定。
再多了解一些

本文用于创业者技术爱好者查询,仅供学习研究,如用于商业用途,请联系技术所有人。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

相关文献