Architecture 谷歌是如何如此快速地提供搜索结果的?

Architecture 谷歌是如何如此快速地提供搜索结果的?,architecture,search-engine,Architecture,Search Engine,当我在谷歌上搜索一个主题时, 谷歌会将结果返回给我,并打印出一些数据,比如 “j2me大约8850000的结果1-10。(0.24秒)” 我注意到谷歌提供搜索结果所用的秒数只是秒数范围的几分之一 谷歌是如何如此快速地为页面服务的,它在其终端使用了什么样的数据库优化技巧?+巨大的分布式数据中心。我认为前端性能的主要原因是: 每个请求被并行地分发到一系列机器上(我在某个地方读到,每个查询访问大约12台机器),可能只有一台机器收集这些机器的响应 所有索引数据都保存在RAM中。对于索引数据,我指的是词

当我在谷歌上搜索一个主题时, 谷歌会将结果返回给我,并打印出一些数据,比如

“j2me大约8850000的结果1-10。(0.24秒)”

我注意到谷歌提供搜索结果所用的秒数只是秒数范围的几分之一


谷歌是如何如此快速地为页面服务的,它在其终端使用了什么样的数据库优化技巧?

+巨大的分布式数据中心。

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

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

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

我想用户可以从这个答案中受益。实际上,在第二次搜索中,它大约是0.1秒!因为他们必须将搜索条件缓存一段时间。如果全世界有人搜索过你的标准,那么第一次搜索也需要0.1秒!要尝试这个方法:键入“map”和search,您会看到这总是大约0.1秒,因为用户经常搜索它。但是如果你搜索像“asdasdfdsfsf”这样的随机文本,需要0.2-0.5秒。好的,先生,我想你错过了一点。谷歌不仅返回URL列表,而且还提供一个排名列表。因此,一旦查询命中这12台机器中的一台,就必须进行某种计算。考虑到个性化也在进行,而且谷歌拥有数十亿的用户群,我打赌GFS和MapReduce会在这12台机器中的每台机器的索引中检索url列表,以计算每个检索url与查询的相关性。当然,你可以对这些相关数字进行排序,以返回排名的列表,先生,我仍然反对。MapReduce是通过设计一个具有相当高延迟的批处理系统实现的。在这两种情况下,这都是(受过教育的)猜测。我不确定。
所有索引数据都保存在RAM中。“这太傻了!”迈克尔迈尔显然是谷歌在2001年转向了内存索引:我仍然不知道谷歌怎么可能有足够的内存来存储面向公众的互联网的全部内容。MapReduce不太可能是快速实时计算的关键。提交作业时,由于Hadoop的设计性质,其延迟通常超过一分钟。