【问题标题】:how facebook maintains a good speed for instant auto-suggestionfacebook 如何保持良好的即时自动建议速度
【发布时间】:2011-12-28 13:56:56
【问题描述】:

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

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

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

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

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

【问题讨论】:

  • 试图接受满意的答案
  • 为什么是负面排名?

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


【解决方案1】:

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

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

希望有帮助

【讨论】:

  • 如果没有那么多 php 那又怎样?
  • @IstiaqueAhmed 链接现在已修复... 没有那么多 PHP 数据库查询/设置。您甚至可以说正在执行 ajax 发布并显示自动完成功能的 javascript 起到了作用。
【解决方案2】:

可能是patricia-trieternary search tree 之类的数据结构。

suggesttree 喜欢:suggesttree

【讨论】:

  • 如果我使用来自 memcached.org 的 memcahced,我应该或是否需要使用这些算法?
  • 即使您使用 memcached,您也必须使用数据结构。 Memcached 仅用于缓存。当有太多条目需要通过时,数据结构会有所帮助。当用户登录时保持条目(使用数据结构)缓存。并且仅当用户尝试在设置为自动建议的文本框中键入内容时才使用它。即这与 AJAX 和 PHP 有关。这将有助于提高自动建议的性能(正如您所提到的:'保持自动建议的速度?')。
【解决方案3】:

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

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

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

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

【讨论】:

  • '- 你建立一个名称索引 -> dom 元素,你离线执行 dom 操作 -' 多一点关于 dom 操作?怎么可以离线完成?
  • @IstiaqueAhmed see here。离线我的意思是不要将 anithing 应用于浏览器中呈现的 DOM,而是应用于内存中的副本
  • '这里不涉及数据库' - 那么配置文件记录和此类内容存储在哪里?
  • ,'您必须检索整个朋友列表,并将其存储在索引 javascript 数组中' - 我应该什么时候这样做?用户需要遍历朋友列表的时间,即发送消息给朋友?如果是这样,那么第一次,必须从数据库中检索整个好友列表,然后将其保存在 js 数组中。所以从第二次开始,而不是第一次,用户将获得增强的速度。我的概念对吗?
猜你喜欢
  • 2015-08-02
  • 2020-04-13
  • 1970-01-01
  • 2013-08-03
  • 1970-01-01
  • 2011-04-19
  • 1970-01-01
  • 2015-03-21
  • 2012-12-21
相关资源
最近更新 更多