facebook如何保持即时自动建议的良好速度

时间:2011-12-28 13:56:56

标签: php facebook performance performance-testing database-performance

Facebook具有在各种情况下显示即时自动建议结果的功能,例如:搜索,消息发送等。

我认为我将该功能称为“自动建议”是正确的。

如果用户有1000个朋友且他/她希望向朋友发送消息,则Facebook会在输入几个字符时建议他/她的名字。

我的问题是:在从数据库中提取数据以寻找朋友(或任何此类情况)然后使用它进行处理时,FB使用哪种技术来保持自动建议的速度?

是缓存变量还是什么?我想详细了解,因为我打算建立一个社交网站。我的脚本语言是php

3 个答案:

答案 0 :(得分:1)

可能是patricia-trieternary search tree等数据结构。

suggesttree赞:suggesttree

答案 1 :(得分:1)

我认为其中很大一部分并不是PHP,尽管已知facebook使用hiphop来编译PHP。

更重要的因素IMO将成为数据库方面的事情。查询可能尽可能优化,只回到它需要的地方,缓存可能也会发挥作用,即用户的朋友已经被检索,很可能找回最常联系的朋友。 Facebook也有大量的数据库服务器,这只能帮助加速。

希望有所帮助

答案 2 :(得分:0)

自动建议1000或甚至5000个条目并不难。你必须检索整个朋友列表,并将其存储在索引的javascript数组中(例如我们使用第一个字母作为索引,所以朋友['a'] = [andrey,albert])然后你实际上是在搜索在内存中从一个小子集。

邀请窗口以类似的方式构建 - 您构建名称索引 - > dom元素,您可以离线执行dom操作 - 并且您只会将结果附加到与搜索条件匹配的人员。

好友列表很可能是在memcached中缓存的,而facebook会尽可能地预热缓存 - 它不会等到以任何方式使用好友列表才能将其放入内存缓存中。所以 - 它在memcached中检索,存储在本地存储中并使用高效的JavaScript。这里没有数据库。

P.S。我不是在为facebook发言,但对于类似的解决方案,我们设计的是处理5000多个条目的快速自动建议/邀请对话。