开发者社区> 问答> 正文

[@徐雷frank][¥20]如何设计一个消息中心

当发送一条系统消息时,所有的用户都会出现一条未读消息,这个消息可以标记为已读或者删除,那么这如何进行数据库设计?又是如何进行数据存储的?

展开
收起
Nebula 2018-12-16 11:11:21 4637 0
2 条回答
写回答
取消 提交回答
  • 我觉得消息中心的设计,最主要的点是选择读扩散模型还是写扩散模型。
    如果用户量巨大,写扩散冗余太严重,则可以使用读扩散,即推送中心维护一个消息列表,然后每一个用户端维护一个订阅列表,每次用户刷新的时候,根据自己的订阅,去从消息中心拉取最新的目标消息。这种模型的优势是比较节省存储空间,延时比较低,对于每一个用户来说比较公平可以用于秒杀抽奖消息等场景,缺点在于用户每次必须去消息中心读取订阅的信息,如果订阅量很多,需要做一些额外的优化。
    另一种选择是写扩散,即每条消息对所有用户推送,所有用户端都维护一个inbox,存储所有收到的消息,每条消息推送的点位,保障推送到所有用户,同用户的多端同步也由消息中心记录。这种模式的优势在于读非常快,用户只需要加载自己的inbox,体验很好。劣势在于数据冗余很多,写过重导致延时比较久,不适合类似微博大v这种大量订阅的消息。
    现在一般都是推拉结合的模式。

    2019-07-17 23:22:10
    赞同 展开评论 打赏
  • 1.阿里云大学讲师,主讲《微服务Spring Cloud设计与开发实战》《MongoDB高级实战》等课程 2.MongoDB中文社区专家 3.《MongoDB实战》第2版译者 5.吉林大学计算机科学学士、上海交通大学硕士

    1、消息表
    2、每个用户和这个消息读状态的表,外键关联这个消息
    3、当用户读取的时候,修改该用户的读状态字段
    4、这样可以避免数据冗余,另外一个方法就是每个人发送一个消息副本,这样就是消息复制太多了

    2019-07-17 23:22:10
    赞同 展开评论 打赏
问答分类:
问答地址:
问答排行榜
最热
最新

相关电子书

更多
<<MongoDB 原理与实战>> 电子书发布 - 张友东 立即下载
低代码开发师(初级)实战教程 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载