当发送一条系统消息时,所有的用户都会出现一条未读消息,这个消息可以标记为已读或者删除,那么这如何进行数据存储的?
一般系统消息在用户侧只记录读过的id即可,读取前几十条系统消息再过滤就行了,这种消息没那么重要,时间长的不不管它了
设计两张表
一张是消息表,比如有消息id(全局唯一)和消息内容
一张是状态表,有消息id,用户id和消费状态(已读,删除,未读之类的)
系统管理员查询一条消息的消费情况,可以通过消息id,从状态表中查询出所有用户的消费状态
用户想查询自己的历史一段时间的消息记录,可以通过用户id查询状态表,联合消息表,查询出消息内容
消息可以有两个库来保存,一个是消息存储库,用于全量保存所有会话的消息,主要用于支持消息漫游。另一个是消息同步库,主要用于接收方的多端同步。
消息从发送方发出后,经过服务端转发,服务端会先将消息保存到消息存储库,后保存到消息同步库。完成消息的持久化保存后,对于在线的接收方,会直接选择在线推送。但在线推送并不是一个必须路径,只是一个更优的消息传递路径。
对于在线推送失败或者离线的接收方,会有另外一个统一的消息同步方式。接收方会主动的向服务端拉取所有未同步消息,但接收方何时来同步以及会在哪些端来同步消息对服务端来说是未知的,所以要求服务端必须保存所有需要同步到接收方的消息,这是消息同步库的主要作用。对于新的同步设备,会有消息漫游的需求,这是消息存储库的主要作用,在消息存储库中,可以拉取任意会话的全量历史消息。
可以使用阿里云的表格存储云产品。
先建立一个每个用户和这个消息读状态的消息表,外键关联这个消息,当用户读取的时候,修改该用户的状态字段
这样可以避免数据冗余,另外一个方法就是每个人发送一个消息副本,这样就是消息复制太多
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。