0

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

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

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

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

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

4

3 回答 3

1

可能是像patricia-trie三元搜索树这样的数据结构。

一个suggesttree喜欢:建议树

于 2011-12-28T14:32:04.027 回答
1

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

一个更重要的因素 IMO 将是事物的数据库方面。查询可能已尽可能优化,只取回它需要的内容,缓存可能也会发挥作用,即已经检索到用户的朋友,很可能取回最常联系的朋友。facebook 也有大量的数据库服务器,这只能帮助提高速度。

希望有帮助

于 2011-12-28T14:47:43.037 回答
0

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

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

好友列表最有可能缓存在 memcached 中,并且 facebook 会尽可能早地预热缓存 - 它不会等待以任何方式使用好友列表以便将其放入 memcache 中。所以 - 它在 memcached 中检索,存储在本地存储中并使用高效的 JavaScript。这里不涉及数据库。

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

于 2011-12-28T19:35:37.530 回答