类似微信的聊天系统,需要考虑用户关系,消息的从属关系(发送者、接受者、是否群发等等),序列(时间),状态等;
- 首先,聊天中涉及到的图片和文件、视频等内容,肯定时使用文档数据库、对象数据库进行存储;对应的key存放到消息所在的数据表中
- 上面提到的各种关系、对象,其实都有明确的schema;可以使用关系数据库,对关键的字段加索引;在用户数量和消息数量上来之后,可以通过集群分库分表的方式来应对;
- 消息本身保证最终一致性即可,对于公共的消息、群聊的消息等热点数据,可以通过Redis等键值数据库来存储,一方面做读消息的缓存,一方面做写消息的缓冲,异步存储到关系数据库
考虑的还是不够完善,希望开放题目,老师能给出参照答案。
展开
作者回复: 其实你提到的部分,分析的内容,将数据分类并应用不同的存储技术这方面,已经说得很好了。没有标准答案,但是在思考这样的设计的时候,可以再尝试进一步,比如你讲的第三点,还是颇为模糊,细化的时候就会发现更多问题需要考虑,比如用户是怎么读写的,你说用关系数据库,那这个关系数据库的 schema 怎么设计,使用缓存的话如果掉电消息丢失怎么解决。