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