Facebook 具有在各种情况下显示即时自动建议结果的功能,例如:搜索、消息发送等。
我认为我将功能称为“自动建议”是正确的。
如果用户有 1000 个朋友,并且他/她希望向朋友发送消息,那么 facebook 会在输入几个字符时建议他/她的名字。
我的问题是:在从数据库中提取数据以寻找朋友(或任何此类情况)然后处理它时,FB 使用哪种技术来保持自动建议的速度?
它是缓存变量还是什么?我想详细了解,因为我正计划建立一个社交网站。我的脚本语言是 php
Facebook 具有在各种情况下显示即时自动建议结果的功能,例如:搜索、消息发送等。
我认为我将功能称为“自动建议”是正确的。
如果用户有 1000 个朋友,并且他/她希望向朋友发送消息,那么 facebook 会在输入几个字符时建议他/她的名字。
我的问题是:在从数据库中提取数据以寻找朋友(或任何此类情况)然后处理它时,FB 使用哪种技术来保持自动建议的速度?
它是缓存变量还是什么?我想详细了解,因为我正计划建立一个社交网站。我的脚本语言是 php
可能是像patricia-trie或三元搜索树这样的数据结构。
一个suggesttree
喜欢:建议树。
我认为其中很大一部分不是 PHP,尽管众所周知 facebook 使用hiphop来编译 PHP。
一个更重要的因素 IMO 将是事物的数据库方面。查询可能已尽可能优化,只取回它需要的内容,缓存可能也会发挥作用,即已经检索到用户的朋友,很可能取回最常联系的朋友。facebook 也有大量的数据库服务器,这只能帮助提高速度。
希望有帮助
自动推荐 1000 甚至 5000 个条目并不难。您必须检索整个朋友列表,并将其存储在索引 javascript 数组中(例如,我们使用第一个字母作为索引,所以 friends['a'] = [andrey, albert] )然后您实际上是在搜索在内存中的一个小子集。
邀请窗口以类似的方式构建 - 您构建名称索引 -> dom 元素,离线执行 dom 操作 - 并且仅将结果附加到与搜索词匹配的人。
好友列表最有可能缓存在 memcached 中,并且 facebook 会尽可能早地预热缓存 - 它不会等待以任何方式使用好友列表以便将其放入 memcache 中。所以 - 它在 memcached 中检索,存储在本地存储中并使用高效的 JavaScript。这里不涉及数据库。
PS 我不是在为 facebook 说话,但对于类似的解决方案,我们设计用于处理 5000 多个条目的快速自动建议/邀请对话框。