关于 聊天消息存储机制请教

lbyjwwyqt147 2022-2-27 443

现在有群聊,群聊中有100个成员,其中只有成员A发送了一条信息,此时我理解的是成员A发的一条消息会在对应的t_messages表中记录一条记录,在成员A对应的t_user_messages表中记录一条记录。实际操作中发现: 成员A 发送一条记录会在t_messages表中记录一条记录,会在成员A对应的t_user_messages记录一条记录,还会根据其他99个群成员记录成员A发送的消息 t_user_messages表中的 _uid = 其他未发消息的群成员id。 能描述下im存储消息的机制吗? 我们测试中发现在一个群聊只发送了4万多条消息,插入到数据库相关的t_user_messages就有上百万条数据

上传的附件:
最新回复 (3)
  • HeavyRain 2022-2-27
    引用 2
    t_messages_x表中存储的是消息,t_user_messages存储的是用户拥有的消息id。当在一个群内发消息时,会在t_messages_x表中存储消息,然后群的每个用户都会添加一条记录。
  • lbyjwwyqt147 2022-2-28
    引用 3

    这个设计能否优化呢? 群成员中 谁发送的消息就只记录发送者的消息,不给为发送消息的群成员记录消息,一个人发送消息,给群里所有人都记录一条消息,这样数据太大了哇

  • HeavyRain 2022-3-1
    引用 4
    这个问题就是典型的 IM服务中的写扩散和读扩散的两种方案,微信用的是写扩散,QQ用的是读扩散。各有利弊吧,我们综合考虑选择了是改进版本的写扩散。

    https://www.baidu.com/s?wd=%E6%B6%88%E6%81%AF%E7%9A%84%E5%86%99%E6%89%A9%E6%95%A3%E5%92%8C%E8%AF%BB%E6%89%A9%E6%95%A3&tn=84053098_3_dg&ie=utf-8
返回