讨论个问题!微信朋友圈的数据库是怎么设计的?
抱歉各位,是我提的问题有问题,我应该提的详细点,这样的讨论太片面了。我觉得就讨论一个点吧!
比如我发了一个朋友圈,部分人可见,评论点赞好友之间可见(我的好友之间非好友不可见),朋友的朋友圈及时获取所有好友动态。简单的数据存储肯定是不难,难的是如何高效获取数据,数据如何存储?看到的相关方案说什么链表存储,其实想讨论的就是这个数据怎么存储相关数据关系。
首先可以肯定的是,微信有N个数据库;不同的业务甚至说小功能的数据库应该都是不同的。而且我同时可以肯定,微信不会用数据库直接聚合查询来做数据统计。
坐等标准答案
可以参考下微博的数据库设计
朋友遇到一个面试题,微信朋友圈怎么设计?
图片有、东西
想知道 learnKu 数据库怎么设计的
本来就在床头,为什么又藏在床头了。。。 :flushed:
如果按照我自己的常规做法来说,就是使用mysql对用户进行log纪录。
然后使用ES等类似NoSQL数据库实现数据同步,然后在查询时使用 terms 进行过滤,这样就可以查询相关记录了。
然后在获取相关评论的时候,同时对你的好友进行过滤。
然后中间在插入一些广告,当然这应该是另外一个服务实现的,估计就是调用个接口的事情。
这里没考虑到的是量级的问题。问我我也回答不出,因为我没有腾讯这么大的量级。
还有什么没考虑到的可以互相沟通。
我是这么设计的,朋友圈可以理解为“feed流”,“时间轴”。短视频、公众号文章、分享来的链接、图文等等,都是一个单独的对象,有自己独自的表结构,单独建立表,例如moment_video、moment_image,用来记录每种单独的数据结构,然后再建立一个moment表,用来记录统一的信息,比如发布者ID等。 这是很常见的问题了,可以根据信息流表结构设计这个关键词去Google,by the way,laravel的多态很适合这种需求,后续数据量大的话可以再做个mongo来动静分离
好问题,我觉得都能单独写一篇文章了。但是面试问这个是不是有点大病 :unamused:
附上一个QQ架构案例分析: 手机 QQ 的发展历程按照用户规模可以粗略划分为 4 个阶段:十万级、百万级、千万级、亿级,不同的用户规模,IM 后台的架构也不同,而且基本上都是用户规模先上去,然后产生各种问题,倒逼技术架构升级。