对于像 Facebook 这样的大型社交网站来说,最佳的 RDBMS 解决方案是啥?

Posted

技术标签:

【中文标题】对于像 Facebook 这样的大型社交网站来说,最佳的 RDBMS 解决方案是啥?【英文标题】:What is the optimal RDBMS solution for large social networking sites like Facebook?对于像 Facebook 这样的大型社交网站来说,最佳的 RDBMS 解决方案是什么? 【发布时间】:2010-02-10 20:48:04 【问题描述】:

我发现了两种可能的解决方案来实现 Facebook 等社交网站的数据库结构。

1.:创建一个“关系”表并将所有友谊插入其中。例如:用户 A 将 B 添加为朋友 (A-B),然后逻辑将 (A-B) 和 (B-A) 放入“关系”表中。然后它索引第一个属性。

2.:为所有包含朋友的用户创建一个唯一的表。大多数数据库使用近 20 亿个唯一表,所以这不是问题;但是,数据库大小将增加近 300 倍(预计每个用户平均有 300 个朋友)。在这种情况下,查询好友不会有问题(就像 SELECT * FROM 一样简单)

有什么想法吗?我在某个地方错了吗? 谢谢大家。

【问题讨论】:

哦,忘了说:我在寻找如何实现它的答案,我发现他们根本不使用 RDBMS 来实现数据结构。但是以 RDBMS 方式实现仍然很有趣。 AFAIK,Facebook 使用 mysql,但您仍然可能需要考虑使用图形数据库。示例:neo4j.org RDBMS 解决方案是第一个。添加额外的表格,每个数据项一个,不在该方法中。在我见过的每个 SQL 实现中,表名都不像数据条目那样方便地操作。 是的,我阅读了 Twitter 的消息队列,而不是 Facebook。 【参考方案1】:

您描述的每用户表解决方案听起来基本上像 Oracle 的分区功能。

不完全相关,但我推荐这篇很棒的帖子:Presentation Summary “High Performance at Massive Scale: Lessons Learned at Facebook”

我认为友谊表是他们最不关心的问题:)

【讨论】:

这里有一篇关于为社交图谱构建数据库的优秀文章:techportal.ibuildings.com/2009/09/07/…【参考方案2】:

您不必担心最大表格大小之类的问题。为了创建像 Facebook 这样的网站,无论如何您都必须将所有表分片/分区到多台机器上。

【讨论】:

以上是关于对于像 Facebook 这样的大型社交网站来说,最佳的 RDBMS 解决方案是啥?的主要内容,如果未能解决你的问题,请参考以下文章

大型网站的 XML 与 MySQL

Facebook下载总结

用户操作,如社交网络 facebook、myspace,所有大的

为啥我的网站没有重定向到社交网站而是 mydomain/facebook?

区块链项目开发区块链影响社交媒体

为啥大型网站不喜欢本地存储而不是 cookie? [复制]