facebook如何存储用户的朋友?

gra*_*per 7 mysql facebook foreign-keys

我想知道具有id x的用户与具有ids z,y,w的用户的朋友的信息究竟是如何存储在像facebook这样的非常大规模的应用中.

我在考虑几种可能性

a)有一张表将友谊与所涉及的人员的ID作为外键映射,如下所示:

人| isFriendsWith

x ------------------- y

x ------------------ z

x ------------------- w

在我看来它根本不会很好地扩展.

b)在用户行中有一个字段,用一种序列化格式存储朋友的ID,如字符串"#z#y #w".我想用正确的算法解析和更新这个字符串会很容易.

c)与每个用户的朋友分开一张桌子.这会对服务器造成太大负担吗?

d)还有别的吗?

所以,如果有人知道facebook做了什么并且可以分享细节,那将是值得赞赏的,这就是问题所在.此外,如果有人可以分享洞察力,为什么我在这里列出的内容不能很好地扩展或者在性能方面会有其他问题,我有兴趣听到它.

谢谢

hat*_*ica 2

这里有一些链接。第一个链接的页面中有一个链接,上面写着“非常复杂”,链接到模式的 flickr 图像。我无法保证这些链接中任何信息的正确性:

http://www.makeuseof.com/tag/facebook-work-nuts-bolts-technology-explained/

http://www.theregister.co.uk/2011/07/13/mike_stonebraker_versus_facebook/

http://gigaom.com/cloud/facebook-trapped-in-mysql-fate-worse-than-death/

http://snarfed.org/facebook_data_store_api_thoughts/

我提到的图像是通过分析Facebook开放的API中的业务实体而创建的。http://blogs.x2line.com/al/archive/2007/06/02/3124.aspx 那是 2007 年,所以可能不再具有代表性,也可能不再具有代表性。