如何实现社交网络时间轴:优化读取或写入的数据存储?

时间:2014-05-27 11:37:52

标签: database-design social-networking

实施Twitter或facebook时间轴概念的最有效方法是什么?

我有两种方法可以考虑:

当用户写入更新时,它会存储在每个关注者/朋友“邮箱”的数据库中。这使得用户时间线读取非常容易实现,但使写入非常昂贵。想象一下拥有数百万粉丝的Facebook页面或用户。这意味着每次更新都会有数百万次写入,哎哟!

另一种选择是在每条新邮件上只写一次,并使关注者必须遍历数据库并从他们关注的每个用户返回最新更新。如果要分析可能意味着从群集中的所有服务器获取更新的数据。这使得每次读取都非常昂贵。

你会如何解决这个问题?

1 个答案:

答案 0 :(得分:0)

只有活跃的人发帖。只有活跃的粉丝才需要帖子。

此外,您可以缓存:只发送更新。一个人对该追随者看到的每个活跃的粉丝帖子都有。活跃的关注者需要删除,更改或新帖子。这是记录的更多信息,但每个帖子的流量更少。

分片需要为其服务的(有效和无效)人员提供相关信息。

与获取活跃关注者及其分片的更新相比,您所做的工作要少。

Facebook没有显示所有朋友的帖子。他们发一些朋友的帖子。通过让朋友不是追随者,他们减少了与朋友作为追随者的工作。因此,如果您可以更改规范,则可以欺骗您的工作方式。例如,允许延迟显示更新,直到DBMS工作和/或流量较少为止。