• 欢迎访问搞代码网站,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站!
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏搞代码吧

QQ群离线消息如何存的

mysql 搞代码 7年前 (2018-05-31) 200次浏览 已收录 0个评论

QQ群离线消息怎么存的?
离线消息指的是当群中一部分人不在线时,将其他人发到群的消息。离线消息需要保存起来,等到当初没上线的用户上线的时候发给他们。发送完的消息需要删除掉。
乍一想,想到了以下几种数据库表结构,但是都不理想。主要从存储空间和存取性能方面衡量。
结构一:

HTML code

  思路:每条消息对应着各个离线的群员。比如一个群有100人,80人不在线,那么每个群员发出一条消息,就需要插入80条离线消息。 离线消息表(消息ID,用户ID,消息内容,群ID) 优点:用户上线后,只需取出该用户的离线消息后删除该消息就可以了。 缺点:数据冗余极大。插入数据时也比较费时。  

结构二:

HTML code

  思路:拆分结构一中的表,将用户剥离出来,消息和用户为一对多的关系。 离线消息表(消息ID,消息内容,群ID) 消息用户表(消息ID,用户ID) 优点:相对结构一而言,数据冗余少了。 缺点: 1、判断某条消息何时已经发送完给所有应该发送的群员,以便删除该消息时不方便,每次离线群员上线都要做判断。 2、虽然冗余相对少了,但是数据量还是太大了。  

结构三:

HTML code

  思路:在群成员表中将群员排序,并给出排序号。然后在离线消息表中加个标志位字段,每个位对应着一个群员的已读状态(假设为未读为0,已读为1),类似10010100101这种形式的值。 离线消息表(消息ID,消息内容,群ID) 优点: 1、没有数据冗余。 2、写入速度快。 缺点: 1、判断某条消息何时已经发送完给所有应该发送的群员,以删除该消息时不方便,每次离线群员上线都要做判断。 2、群员变动,比如有新成员或成员退群时不好处理。  

不知各位大牛有何高见,或者其他方案?

——解决方案——————–
消息表(群ID,消息ID,时间,内容,。。。)
用户表(ID,。。。)
用户消息表(用户ID,群ID,最后访问时间)
——解决方案——————–
可以从群号%1000来分一千张表。

也可以根据群号%10分10个数据库,然后在各个库里面,根据群号%1000 来分1000张表,这样就是10万张。

群号 用户ID 消息内容 时间

用户每次取完数据,就全部删除该用户的数据。

后台任务定时清除用户的最近的20条消息以外的消息,要把表的大小给控制住,一旦表的大小失控,比如每张表大小超过一定的限度,比如10G,那查询,删除,插入的性能可想而知,最主要的,就是要控制数据表的记录条数。要根据情况分库,分表,来解决这样的问题。


搞代码网(gaodaima.com)提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发送到邮箱[email protected],我们会在看到邮件的第一时间内为您处理,或直接联系QQ:872152909。本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:QQ群离线消息如何存的

喜欢 (0)
[搞代码]
分享 (0)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址