如何在数据库中实现 Facebook 好友模块?

Posted

技术标签:

【中文标题】如何在数据库中实现 Facebook 好友模块?【英文标题】:How To implement Facebook friends module in Database? 【发布时间】:2010-10-12 08:17:15 【问题描述】:

我正在为我的研究所开发一个 facebook 类型的应用程序。

我被困在朋友模块中。即如何知道特定用户是否是自己的朋友。

我搜索了很多,但没有得到任何满意的答案。 我得到的是:一个人会有很多朋友,在单独的表中实现用户和他们的朋友只会增加冗余和大数据库。

我想过使用一个以顶点为用户,边为连接的图。

但是如何在 db 中实现类似的东西。

或者 Facebook 如何处理如此庞大的关系?

【问题讨论】:

我很确定 facebook 使用 NoSQL 解决方案,因为关系数据库对于它们拥有的数据来说过于臃肿。 en.wikipedia.org/wiki/NoSQL 感谢 seanizer........ 在搜索和重新搜索 noSql 之后,我了解了 Cassandra,它非常适合我的应用程序。我希望如此:-) 【参考方案1】:

就我个人而言,我会专门为它准备一张桌子:

你可以有一个只有两列的表:userID 和friendID

由于数据库中用户之间的关系将是多对多的,因此对其进行规范化需要一个链接表,将其分解为多对一对多

http://dev.mysql.com/tech-resources/articles/intro-to-normalization.html#03

【讨论】:

嗯,我之前已经考虑过这种方法......但它只会导致更多的数据,更多的头痛和更多的编程。 @Ashutosh 这是最好的解决方案。所有其他人都会带来更多的头痛和编程。多对多合作从来都不是一件容易的事。【参考方案2】:

这类问题通常通过使用不同类型的数据库来解决。对于社交网络,graph database 应该是有意义的,因为节点和关系是其中的一等公民。 Neo4j 图形数据库有一个 social network example,示例的完整源代码包含在标准下载包中。我还为此主题写了blog post,并以另一个示例为起点。

【讨论】:

以上是关于如何在数据库中实现 Facebook 好友模块?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 Facebook iOS SDK 4.0 获取包含用户名和 ID 的用户好友列表

如何在iOS的XMPPFramework中实现发送好友请求的方式?

如何在 ios 的新 facebook sdk 中实现深度链接?

如何在 C# 中实现 X-FACEBOOK-PLATFORM 机制

如何在 Kivy 中实现社交分享按钮

如何在 iPhone 应用中实现 Facebook 和 Twitter 通知表