f******2 发帖数: 2455 | 1 如何实现一个类似fb的friend status feed的系统(twitter的feed其实也是这么回事
,把你follow的人的新tweet显示到你的homepag上)
我有个naive的方法,但是感觉非常不efficient,先抛砖引玉。
1. 搞个用户表,叫user table吧,每个用户的row上有一个field叫“who is
following me”,(是一个list)当有人follow我的时候,把那人加到这个field
的list 尾部。
2. 搞另外一个表,叫feed table吧,chronically记录每个人的feed里面应该显示什么
。存pointer而不是content,以节省空间,pointer指向content table(见3)的entry
3.再搞个content table,存真正的内容。
每当我发推/文的时候,先把内容写到contnet table里,然后按照“who is
following me”那个list,往那些follow我的人的feed table entry里面append
一个pointer
请问,这个设计还有可以优化的地方吗?twitter/facebook/Tumblr/Pinterest什么的
是这么实现的吗? |
w********m 发帖数: 1137 | 2 pull based 比较好吧
entry
【在 f******2 的大作中提到】 : 如何实现一个类似fb的friend status feed的系统(twitter的feed其实也是这么回事 : ,把你follow的人的新tweet显示到你的homepag上) : 我有个naive的方法,但是感觉非常不efficient,先抛砖引玉。 : 1. 搞个用户表,叫user table吧,每个用户的row上有一个field叫“who is : following me”,(是一个list)当有人follow我的时候,把那人加到这个field : 的list 尾部。 : 2. 搞另外一个表,叫feed table吧,chronically记录每个人的feed里面应该显示什么 : 。存pointer而不是content,以节省空间,pointer指向content table(见3)的entry : 3.再搞个content table,存真正的内容。 : 每当我发推/文的时候,先把内容写到contnet table里,然后按照“who is
|
f******2 发帖数: 2455 | 3 能说的详细些吗?......
: pull based 比较好吧
: entry
【在 w********m 的大作中提到】 : pull based 比较好吧 : : entry
|
w********m 发帖数: 1137 | 4 按你的想法,打个比方,你是一个10m follower的大v。
你一发推,就是10m的push,换成10m的写操作。
万一心情好了,你一天发1k的推,系统就不大好了。
还是用户自己拉比较好。
【在 f******2 的大作中提到】 : 能说的详细些吗?...... : : : pull based 比较好吧 : : entry :
|
C********9 发帖数: 670 | 5 pull model和push model 网上有很详细的资料 |
f******2 发帖数: 2455 | 6 如何实现一个类似fb的friend status feed的系统(twitter的feed其实也是这么回事
,把你follow的人的新tweet显示到你的homepag上)
我有个naive的方法,但是感觉非常不efficient,先抛砖引玉。
1. 搞个用户表,叫user table吧,每个用户的row上有一个field叫“who is
following me”,(是一个list)当有人follow我的时候,把那人加到这个field
的list 尾部。
2. 搞另外一个表,叫feed table吧,chronically记录每个人的feed里面应该显示什么
。存pointer而不是content,以节省空间,pointer指向content table(见3)的entry
3.再搞个content table,存真正的内容。
每当我发推/文的时候,先把内容写到contnet table里,然后按照“who is
following me”那个list,往那些follow我的人的feed table entry里面append
一个pointer
请问,这个设计还有可以优化的地方吗?twitter/facebook/Tumblr/Pinterest什么的
是这么实现的吗? |
w********m 发帖数: 1137 | 7 pull based 比较好吧
entry
【在 f******2 的大作中提到】 : 如何实现一个类似fb的friend status feed的系统(twitter的feed其实也是这么回事 : ,把你follow的人的新tweet显示到你的homepag上) : 我有个naive的方法,但是感觉非常不efficient,先抛砖引玉。 : 1. 搞个用户表,叫user table吧,每个用户的row上有一个field叫“who is : following me”,(是一个list)当有人follow我的时候,把那人加到这个field : 的list 尾部。 : 2. 搞另外一个表,叫feed table吧,chronically记录每个人的feed里面应该显示什么 : 。存pointer而不是content,以节省空间,pointer指向content table(见3)的entry : 3.再搞个content table,存真正的内容。 : 每当我发推/文的时候,先把内容写到contnet table里,然后按照“who is
|
f******2 发帖数: 2455 | 8 能说的详细些吗?......
: pull based 比较好吧
: entry
【在 w********m 的大作中提到】 : pull based 比较好吧 : : entry
|
w********m 发帖数: 1137 | 9 按你的想法,打个比方,你是一个10m follower的大v。
你一发推,就是10m的push,换成10m的写操作。
万一心情好了,你一天发1k的推,系统就不大好了。
还是用户自己拉比较好。
【在 f******2 的大作中提到】 : 能说的详细些吗?...... : : : pull based 比较好吧 : : entry :
|
C********9 发帖数: 670 | 10 pull model和push model 网上有很详细的资料 |
|
|
f******2 发帖数: 2455 | 11 高人,请给个链接。
正在做一个toy project,谢谢
: pull model和push model 网上有很详细的资料
【在 C********9 的大作中提到】 : pull model和push model 网上有很详细的资料
|
c*********e 发帖数: 16335 | 12 你是database developer吧?
entry
【在 f******2 的大作中提到】 : 如何实现一个类似fb的friend status feed的系统(twitter的feed其实也是这么回事 : ,把你follow的人的新tweet显示到你的homepag上) : 我有个naive的方法,但是感觉非常不efficient,先抛砖引玉。 : 1. 搞个用户表,叫user table吧,每个用户的row上有一个field叫“who is : following me”,(是一个list)当有人follow我的时候,把那人加到这个field : 的list 尾部。 : 2. 搞另外一个表,叫feed table吧,chronically记录每个人的feed里面应该显示什么 : 。存pointer而不是content,以节省空间,pointer指向content table(见3)的entry : 3.再搞个content table,存真正的内容。 : 每当我发推/文的时候,先把内容写到contnet table里,然后按照“who is
|
u********s 发帖数: 1047 | 13 看情况吧,比如twitter大部分人都是读不是发推。而且一个人一天刷新100次的几率比
发100 tweets的几率大多了。这时候每个用户都去pull就比较蛋疼了
【在 w********m 的大作中提到】 : 按你的想法,打个比方,你是一个10m follower的大v。 : 你一发推,就是10m的push,换成10m的写操作。 : 万一心情好了,你一天发1k的推,系统就不大好了。 : 还是用户自己拉比较好。
|
r********e 发帖数: 39 | 14 看 high scalability web site啊,有许多基于real life的 design sample 文档
http://highscalability.com/display/Search?moduleId=4876569&searchQuery=feed
看完了后给大家讲讲你的选择,感觉在不同的traffic volume阶段有不同的答案。 |
g*********e 发帖数: 14401 | 15 第一个建议,不要用MySQL 那样局限你的思路 |
f******2 发帖数: 2455 | |
w********m 发帖数: 1137 | 17 把leetcode的design twitter,用push和pull各写一遍就可以了。 |
p**r 发帖数: 5853 | 18 https://www.youtube.com/watch?v=gX8S7b8UYl8
个人建议
#1
follow list不建议存在一个field里面,删除的时候麻烦。
弄个userRelationship存,有变化之后,push到cache层去,
读的时候从cache层读。
#2
push或pull真不好说,同意readingJoe的不同阶段不同处理,
可以发散思维成,不同用户级别不用处理。 |
f******2 发帖数: 2455 | 19 leetcode还有系统design的题目?是免费的吗?
: 把leetcode的design twitter,用push和pull各写一遍就可以了。
【在 w********m 的大作中提到】 : 把leetcode的design twitter,用push和pull各写一遍就可以了。
|
w********m 发帖数: 1137 | 20 https://leetcode.com/problems/design-twitter/#/description
【在 f******2 的大作中提到】 : leetcode还有系统design的题目?是免费的吗? : : : 把leetcode的design twitter,用push和pull各写一遍就可以了。 :
|
r********e 发帖数: 39 | 21 最近碰到了类似的实际问题,这里有MongoDB的一个解法,稍微旧了点,2014年的slide
https://www.slideshare.net/mongodb/socialite-the-open-source-status-feed-
part-3-scaling-the-data-feed
User relation 它推荐用double relationship table/index, 这样有利于sharding 和
index查询,具体见他 part 2 的 slide
https://www.slideshare.net/mongodb/socialite-pt-2 |