Redian新闻
>
一个system design题:content feed
avatar
一个system design题:content feed# Programming - 葵花宝典
a*l
1
How many threads will you create for a parallelized algorithm running in 32
computers if it is cpu intensive? how if it is IO intensive?
这个怎么答?有什么tutorial可以补一下吗?
avatar
f*2
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
following me”那个list,往那些follow我的人的feed table entry里面append
一个pointer
请问,这个设计还有可以优化的地方吗?twitter/facebook/Tumblr/Pinterest什么的
是这么实现的吗?
avatar
q*q
3
如果是占cpu的,那多线程也没用啊,如果每个机器就一个cpu,单core,那就是32个了
。如果IO intensive就在主线程外开线程专门进行IO操作吧。

32

【在 a****l 的大作中提到】
: How many threads will you create for a parallelized algorithm running in 32
: computers if it is cpu intensive? how if it is IO intensive?
: 这个怎么答?有什么tutorial可以补一下吗?

avatar
w*m
4
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

avatar
f*2
5
能说的详细些吗?......


: pull based 比较好吧

: entry



【在 w********m 的大作中提到】
: pull based 比较好吧
:
: entry

avatar
w*m
6
按你的想法,打个比方,你是一个10m follower的大v。
你一发推,就是10m的push,换成10m的写操作。
万一心情好了,你一天发1k的推,系统就不大好了。
还是用户自己拉比较好。

【在 f******2 的大作中提到】
: 能说的详细些吗?......
:
:
: pull based 比较好吧
:
: entry
:

avatar
C*9
7
pull model和push model 网上有很详细的资料
avatar
f*2
8
如何实现一个类似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什么的
是这么实现的吗?
avatar
w*m
9
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

avatar
f*2
10
能说的详细些吗?......


: pull based 比较好吧

: entry



【在 w********m 的大作中提到】
: pull based 比较好吧
:
: entry

avatar
w*m
11
按你的想法,打个比方,你是一个10m follower的大v。
你一发推,就是10m的push,换成10m的写操作。
万一心情好了,你一天发1k的推,系统就不大好了。
还是用户自己拉比较好。

【在 f******2 的大作中提到】
: 能说的详细些吗?......
:
:
: pull based 比较好吧
:
: entry
:

avatar
C*9
12
pull model和push model 网上有很详细的资料
avatar
f*2
13
高人,请给个链接。
正在做一个toy project,谢谢


: pull model和push model 网上有很详细的资料



【在 C********9 的大作中提到】
: pull model和push model 网上有很详细的资料
avatar
c*e
14
你是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

avatar
u*s
15
看情况吧,比如twitter大部分人都是读不是发推。而且一个人一天刷新100次的几率比
发100 tweets的几率大多了。这时候每个用户都去pull就比较蛋疼了

【在 w********m 的大作中提到】
: 按你的想法,打个比方,你是一个10m follower的大v。
: 你一发推,就是10m的push,换成10m的写操作。
: 万一心情好了,你一天发1k的推,系统就不大好了。
: 还是用户自己拉比较好。

avatar
g*e
17
第一个建议,不要用MySQL 那样局限你的思路
avatar
f*2
18
谢谢。
这篇和我上面的思路类似,具体用什么key-value store都是后续问题。
http://highscalability.com/blog/2013/10/28/design-decisions-for-scaling-your-high-traffic-feeds.html#comment20928338


: 看 high scalability web site啊,有许多基于real life的 design sample 文档

: http://highscalability.com/display/Search?moduleId=4876569

【在 r********e 的大作中提到】
: 看 high scalability web site啊,有许多基于real life的 design sample 文档
: http://highscalability.com/display/Search?moduleId=4876569&searchQuery=feed
: 看完了后给大家讲讲你的选择,感觉在不同的traffic volume阶段有不同的答案。

avatar
w*m
19
把leetcode的design twitter,用push和pull各写一遍就可以了。
avatar
p*r
20
https://www.youtube.com/watch?v=gX8S7b8UYl8
个人建议
#1
follow list不建议存在一个field里面,删除的时候麻烦。
弄个userRelationship存,有变化之后,push到cache层去,
读的时候从cache层读。
#2
push或pull真不好说,同意readingJoe的不同阶段不同处理,
可以发散思维成,不同用户级别不用处理。
avatar
f*2
21
leetcode还有系统design的题目?是免费的吗?


: 把leetcode的design twitter,用push和pull各写一遍就可以了。



【在 w********m 的大作中提到】
: 把leetcode的design twitter,用push和pull各写一遍就可以了。
相关阅读
logo
联系我们隐私协议©2024 redian.news
Redian新闻
Redian.news刊载任何文章,不代表同意其说法或描述,仅为提供更多信息,也不构成任何建议。文章信息的合法性及真实性由其作者负责,与Redian.news及其运营公司无关。欢迎投稿,如发现稿件侵权,或作者不愿在本网发表文章,请版权拥有者通知本网处理。