2010-05-07 81 views
4

嘿,我很难相信Facebook使用简单的sql,当然它会使用一些其他方法,但现在假设它使用sql如何将代码同化'墙'工作?快速浏览Facebook的数据库?

比方说,有三个表(只是例子)

好友:ID(输入键) - UID(您的ID) - FID(你的队友身份证)

墙:ID(输入键) - 用户名 - 评论 - 时间 - commentcount

评论:ID(输入键) - WID(墙ID(原文评论)) - 回复 - 时间

让我们忘了像部分和报告等,以及mod的东西(IP,禁令等)这将如何工作?

选择wall.id,wall.username,wall.comment,wall.time,wall.commentcount,comments.wid,comments.reply,comments.time从墙内部加入评论ON wall.id = comments.wid ORDER BY wall.time;

这是你自己的墙,但他们怎么得到朋友的?一堆工会?

+0

事实上他们并没有。 Facebook开始使用MySQL,但转移到[Apache Cassandra](http://en.wikipedia.org/wiki/Cassandra_%28database%29),[NoSQL](http://en.wikipedia.org/wiki/NoSQL )的解决方案,有时他们大约有1亿用户:http://www.cs.cornell.edu/projects/ladis2009/papers/lakshman-ladis2009.pdf – 2010-05-07 05:56:38

+1

我敢打赌,人们如何知道**他们**得到朋友列表或谁**完全知道**的Facebook数据库架构 - 不会谈论它;-) – zerkms 2010-05-07 06:01:27

+0

其中wall.username/*应该是uID offcourse */in(从选择fid id = yourid朋友)或什么? – Konerak 2010-05-07 06:15:50

回答

0

那么,作为一个社交网站的创始人,让我解释一下。你接近于正确的...至于你的问题,关于他们如何得到朋友,在mysql的情况下,他们会通过他们的朋友表中他们的id匹配的所有朋友循环。然后,他们会while循环评论在哪里每个朋友id匹配用户的id在我的情况下,也就是$ _SESSION ['user_id'] = uid。请记住,不仅是while循环中的注释,而且查询也在while循环中,因此它不仅查询登录的user = uid的一个实例。