[提问] 2015 年最新数据库面试题:如何设计多维度交叉 feed 流?

2015-09-07 23:06:50 +08:00
 itbdw

小弟刚遇到一个面试题,困惑了,大家有什么方案或思路么?

有一个 SNS 网站,有以下主要元素

人、标签、问题、答案

如何设计数据库,能够满足

人可以关注人、标签、问题
问题可以打多个标签

feed 流内能混合出现

1 ,我关注的人提问的问题
2 ,我关注的问题新增的回答
3 ,我关注的标签新出现的问题

这样的话怎么搞 feed 表呢,觉得好复杂。。。

1293 次点击
所在节点    数据库
7 条回复
IwfWcf
2015-09-08 02:28:10 +08:00
无非就是要选择读扩散还是写扩散方案嘛……
dbfox
2015-09-08 08:04:56 +08:00
嗯,我也在这里问过同样的问题
dbfox
2015-09-08 08:06:10 +08:00
lijunnan
2015-09-08 09:00:35 +08:00
lz 的头像是自己画的吗?
itbdw
2015-09-08 09:58:13 +08:00
@lijunnan 是自己画的。
itbdw
2015-09-08 18:25:35 +08:00
@IwfWcf
@dbfox

之前纠结在如何在一张表里处理不同的 feed 关系。

后来想了下,建立 feed 表,用户 feed 表。

feed 表只记录原始数据,比如 xx 发布了 yyy ,

用户 feed 表只记录用户 id 和 feedid 的关系就完事儿了。

更新用户 feed 表的时机读或者写都可以,写的话量大了加异步队列处理。
IwfWcf
2015-09-08 19:09:15 +08:00
@itbdw 一般是一个用户会有一个 obj 表和 timeline 表,读扩散就是根据关系链去拉所有关注的用户的 timeline 后排序,写扩散就是会更新所有关注者的 timeline 表

如果存在关注者很多的明星类用户则对写扩散不友好,所以还有一种混合方案是对这种用户就采取读扩散的策略。这方面微博有很多分享可以参考

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/218982

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX