【问题标题】:How does Google serve results so fast? [duplicate]Google 如何如此快速地提供结果? [复制]
【发布时间】:2009-08-20 16:26:17
【问题描述】:

当我一次又一次在 Google 上搜索主题时, Google 将结果返回给我并打印出一些统计数据,例如

“j2me 的结果 1 - 10 约为 8,850,000。(0.24 秒)”

我注意到 Google 提供结果所用的秒数不到一秒。

Google 为何如此快速地提供页面,它最终使用了什么样的数据库优化技巧?

【问题讨论】:

  • 我想 SO 用户可以从这个答案中受益。
  • 实际上第二次搜索大约是 0.1 秒!因为他们必须将搜索条件缓存一段时间。如果世界各地的其他人搜索了您的条件,那么第一次也是 0.1 秒!试试这个:输入“地图”和搜索,你会发现这总是大约 0.1 秒,因为它一直被用户搜索。但是,如果您搜索“asdasddsfdsfsf”之类的随机文本,则需要 0.2 -0.5 秒。

标签: architecture search-engine


【解决方案1】:

我认为前端性能的主要原因是:

  • 每个请求被并行分发到一系列机器(我在某处读到,每个查询都会访问大约 12 台机器),可能只有一台机器收集这些机器的响应
  • 所有索引数据都保存在 RAM 中。 对于索引数据,我指的是术语词汇表和帖子列表索引,在 Google 的情况下可能有更多的索引,例如用于拼写更正。即使在某处使用单个磁盘 I/O,磁盘寻道的延迟也会阻止这种性能。

Google 的 Map/Reduce、GFS 是很好的后台处理工具,但它们与前端性能无关。

【讨论】:

  • 好吧,先生,我认为您在这里遗漏了一点。谷歌不仅返回 URL 列表,而且实际上是它们的排名列表。因此,一旦查询命中这 12 台机器中的一台,就必须进行某种计算。考虑到个性化也进行了,而且谷歌拥有数十亿的用户群,我将赌注押在 GFS 和 MapReduce 被用于从这 12 台机器中的每一台的索引中检索到的 URL 列表中,以计算每台检索到的相关性url w.r.t 查询。然后你可以对这些相关性数字进行排序以返回排名列表
  • 先生,我还是打赌。 MapReduce 在设计上是一个具有相当高延迟的批处理系统。无论哪种情况,这都是(有根据的)猜测。我不确定。
  • All index data are held in RAM。这很愚蠢。
  • @michaelmeyer 显然谷歌在 2001 年切换到内存内索引:en.wikipedia.org/wiki/Google_Data_Centers#Index 我仍然不知道谷歌怎么可能有足够的内存来存储面向公众的互联网的全部内容.哇。
【解决方案2】:

Map and Reduce + 庞大的分布式数据中心。

【讨论】:

  • MapReduce 不太可能成为快速实时计算的关键。提交作业时,由于其设计性质,Hadoop 的延迟通常超过一分钟。
猜你喜欢
  • 2021-09-18
  • 1970-01-01
  • 2020-09-07
  • 1970-01-01
  • 2020-09-28
  • 1970-01-01
  • 2020-05-25
  • 2018-11-03
  • 1970-01-01
相关资源
最近更新 更多