我打算创建一个社交网络,我不认为我完全理解facebook的状态更新模块是如何设计的.希望我能在这里找到一些帮助.在算法和数据结构级别,在社交网络中创建状态更新机制的最有效方法是什么?
对所有朋友进行全表扫描然后对他们的更新进行排序是非常天真和昂贵的.我们是否使用基于散列或其他东西的某种机制?请告诉我.
PS:我不是在谈论他们的EdgeRank算法,而是基本的状态更新.他们如何从数据库中查找和获取它们?
在此先感谢您的帮助!
这是一个很好的演示文稿,可以回答您的问题 具体答案出现在55:40左右,但我建议您观看整个演示文稿,以了解该解决方案如何适应整个架构.
简而言之:
特定服务器("叶子")存储特定用户的所有馈送项.因此,您的每个朋友的数据都完全存储在特定目的地.
当您想要查看新闻源时,其中一个聚合器服务器会向您的朋友的所有叶子服务器发送请求并对结果进行排名.聚合器基于每个朋友的用户ID知道哪些服务器发送请求.
当然,这非常简单.这只能工作,因为所有这些都是memcached,系统旨在最小化延迟,一些排名是在包含朋友的feed项等的叶子服务器上完成的.
你真的不想在数据库中找到任何一个以合理的速度工作的数据库.FB使用MySql主要作为键值存储; 在他们的规模上加入表是不可能的.然后他们将memcache服务器放在数据库和应用程序服务器的前面.
话虽如此,在你拥有它们之前不要担心缩放问题(当然,除非你为了它的乐趣而担心它们.)在第一天,缩放是你问题中最少的.