我想知道id为x的用户与具有ids z,y,w的用户的朋友的确切信息是如何存储在像facebook这样的大型应用中。
我正在考虑几种可能性
a)有一张表格,将友谊与所涉及的人员的ID作为外键映射,如下所示:
x ------------------- y
x ------------------ z
x ------------------- w
在我看来它根本不会很好地扩展。
b)在用户行中有一个字段,用一种序列化格式存储朋友的ID,如字符串“#z#y #w”。我想用正确的算法解析和更新这个字符串会很容易。
c)与每个用户的朋友分开一张桌子。这会对服务器造成太大的负担吗?
d)还有别的吗?
所以,如果有人知道facebook做了什么并且可以分享细节,那么我们将不胜感激,这就是问题所在。此外,如果有人可以分享洞察力,为什么我在这里列出的内容不能很好地扩展或者在性能方面会有其他问题,我有兴趣听到它。
由于
答案 0 :(得分: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年,所以可能或可能不具有代表性。