Twitter时间线算法是如何工作的?

8

我正在尝试设计一个类似Twitter时间线的系统,但是我无法理解如何在保持高效的情况下从这么多关注者那里获取更新。比方说,我在Twitter上关注了1000个人。当我进入我的动态时,它如何知道要向我展示哪些推文呢?以下是我的思考过程,但这似乎非常低效并且不太可能实现:

You have 10,000 friends.
In a for loop, loop through each friend, getting their latest 
  status updates since their last update. 

但是循环遍历10000个好友的做法似乎有些荒谬。不过我无法想象他们还能用什么其他方式。或者可能会是这种情况:

Someone I am following posted a tweet. That tweet is inserted in 
  an array containing the tweets of all people I am following.

但是如果我关注了一个有20,000条推文的新用户,那么这20,000条推文将被插入我的数组中,而如果该用户有数百万的粉丝,则会有一百万个 X 20,000 条相同的推文副本。所以这也似乎不太可能。

有人有什么想法吗?


我不知道它的实际工作原理,但我可以猜测:首先,使用ID进行操作。每个推文都有唯一的ID并保存在数据库中。每个关注者都有一个包含推文ID的数组(也可以在数据库中)。 - LeeNeverGup
@LeeNeverGup 但是如果有10万人关注我并且我发布了一条新推文,我需要循环遍历10万个人并将推文ID插入到他们的数组中吗?这不是很疯狂吗?还是说这很正常? - Snowman
1
你应该阅读这篇文章http://engineering.twitter.com/2012/07/caching-with-twemcache.html,它强调了使用缓存来实现性能。即使是Twitter也无法从磁盘中提供所有内容。因此,如果您想扩展并实现性能,缓存就显得非常重要。 - Karan Ashar
2
根据wikipedia的描述,我并没有太离谱:“使用名为snowflake的软件注册独特的ID以记录单个推文,并使用“Rockdove”添加地理位置数据…… 推文存储在MySQL数据库中…… 并向用户确认已发送…… 过程由FlockDB管理,平均需要350毫秒。” 查看他们的来源 - LeeNeverGup
@LeeNeverGup 很棒的文章。虽然它没有提到最重要的部分的细节 :( - Snowman
显示剩余2条评论
1个回答

3

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接