• Mandalorian
    2019-11-13
    类似微信的聊天系统,需要考虑用户关系,消息的从属关系(发送者、接受者、是否群发等等),序列(时间),状态等;

    - 首先,聊天中涉及到的图片和文件、视频等内容,肯定时使用文档数据库、对象数据库进行存储;对应的key存放到消息所在的数据表中
    - 上面提到的各种关系、对象,其实都有明确的schema;可以使用关系数据库,对关键的字段加索引;在用户数量和消息数量上来之后,可以通过集群分库分表的方式来应对;
    - 消息本身保证最终一致性即可,对于公共的消息、群聊的消息等热点数据,可以通过Redis等键值数据库来存储,一方面做读消息的缓存,一方面做写消息的缓冲,异步存储到关系数据库


    考虑的还是不够完善,希望开放题目,老师能给出参照答案。
    展开

    作者回复: 其实你提到的部分,分析的内容,将数据分类并应用不同的存储技术这方面,已经说得很好了。没有标准答案,但是在思考这样的设计的时候,可以再尝试进一步,比如你讲的第三点,还是颇为模糊,细化的时候就会发现更多问题需要考虑,比如用户是怎么读写的,你说用关系数据库,那这个关系数据库的 schema 怎么设计,使用缓存的话如果掉电消息丢失怎么解决。

    
    
  • 靠人品去赢
    2019-11-08
    其实类似微信的通讯工具,他会在你本地有个类似NoSQL的东西,搜个关键字什么的都支持,但是你发现你要找更久的,他会弹出一个框,你可以设置日期其实这个最后要走的关系型数据库去查询。毕竟大家都把NoSQL作为自己的中间件,提高响应缓冲服务器压力之类的,到最后数据还是要乖乖的存在MySQL这些关系型数据库。
    
    
  • leslie
    2019-11-08
    关于老师今天的题目给出两种答案:
    一种是文档型数据库mongodb。虽然是NOSQL阵营,但是其支持类SQL且用的是JSON,而现在mysql5.7开始的版本用sql,但是支持JSON;主要是文档型数据库适合这种场景;
    另外一种方式就是redis+MySQL:其原因不言而喻了,太多类似方式了
    
    
我们在线,来聊聊吧