为什么Google比硬盘搜索快得多?


251

当我在Windows 7或Windows XP中的HD上搜索文件时,需要几分钟才能完成该过程。如果我在Google中填写搜索字词,则答案以毫秒为单位显示在屏幕上

Google如何搜索比我的硬盘驱动器大很多倍,比操作系统搜索我的计算机快的Internet?仅仅是计算能力和正确算法的问题吗?


99
您是否尝试过索引驱动器上的所有文件并仅搜索索引?尝试一切,看看。
卡兰2013年

11
Google桌面也“用于” Windows
操作系统

14
Google搜索存储在RAM中的索引,而不搜索硬盘驱动器上的文件。
2013年

13
索引很重要,但是Google还使用map-reduce算法来进行大规模并行操作。无论您的计算机中有多少个内核,我都保证Google拥有更多的内核。
亚当·乌尔

41
没有什么可以排除使用索引的桌面搜索实现。但是,请记住,谷歌有足够的现金用于a)许多非常快的CPU /服务器来并行化查询;b)许多非常快的RAM,以避免曾经访问过磁盘;c)许多硬盘比您使用的硬盘快得多;d)许多非常聪明的工程师可以优化所涉及的算法。(例如,缓存(很多)经常使用的查询的结果,等等。)这不仅是“仅”一个问题,而是所有这些共同作用。
millimoose13年

Answers:


211

Google不在搜索互联网:它正在搜索索引。Google拥有庞大的服务器场,这些服务器场正在不断扫描和索引互联网。该过程需要很多时间,就像搜索未索引的硬盘驱动器一样。在Windows 7中,有一个索引硬盘的选项。这个过程最初需要一些时间,但是一旦启动并运行,搜索结果将立即生效。

如果您想了解更多关于谷歌搜索是如何工作的,你可以阅读谷歌的文章“ 搜索工作原理 ”或阅读文章“ 的东西的工作原理:如何谷歌工程 ”。


46
最后一段:此链接更具权威性,总体上更好。
ulidtko

4
出于好奇,请问文件系统是否已为磁盘上的文件建立索引?您不是在文件资源管理器中看到的仅仅是指向磁盘上实际物理扇区的链接的索引吗?那么,为什么我们需要做更多的索引工作呢?
阿迪

9
@Adnan文件系统索引旨在查找文件在物理介质上的存储位置。就像一本书的索引一样,它告诉您章节从哪一页开始。搜索索引旨在查找内容。一个好的搜索索引不仅索引文件名,而且索引诸如pdf,doc,html等已知文件类型的内容。高级索引还使用同义词,因此,如果您搜索“ car”,则可能会找到结果“汽车”一词。
西蒙(Simon)

3
@Adnan,文件系统并不是真正的“索引”,只是一棵文件名树。搜索这样的树并不快,因为它的结构并未针对搜索进行优化。OTOH谷歌(和数据库)使用特定的排序索引结构,可快速查找特定条目。即使这样,并非所有搜索都可以从这种索引中受益,并且搜索速度会变慢。
PiRX

8
@Adnan从某种意义上说,FS树针对搜索进行了优化。它旨在允许寻址已知位置。从您的根节点,您所获得的只是根目录下的目录和文件的列表。每个目录只知道其中的文件及其下的目录。在这种情况下,访问已知的文件路径非常快,并且提供了很大的灵活性,但是不存在要搜索的全局文件列表。您必须始终从目录树中下来,这需要进行许多不同的查找。
Phoshi 2013年

71

Google就像在黄页上搜索地址(已索引)。Windows搜索类似于在建筑物上检查数字(未索引)。

另一个比喻是浏览一个组织良好的图书馆和卡片目录,或者每次都在整理一堆无序的书。

从根本上讲,这是使搜索快速进行的所有组织工作。

仅供参考:在搜索索引位置时,Windows搜索可以像响应一样快。


5
或:扫描教科书vs查看(详细的)目录
bobobobo

36

Google的业务是搜索(并投放广告),并且非常专注于此。Google采取多种措施来确保将数据快速返回给您:

  • 首先,它使用MapReducePageRank生成万维网的综合索引。它会定期对此进行更新,因此结果是新鲜的。
  • 该索引在Google的许多服务器上分布和复制
  • 您的查询被拆分到多个服务器上以构建返回的结果。这使过程高度并行化。
  • 通用查询和结果被缓存,从而根本不需要执行搜索。

有关此搜索如何工作的更多信息,请参见此链接。

相对而言,没有索引的硬盘搜索必须读取驱动器上的每个文件,这会花费很多时间。

另外,您可以将文件系统和索引都视为树。在文件系统中,树的根是顶级文件夹,并且该文件夹中可以有分支(文件夹)或叶子(文件)。每个分支可以具有用于更多文件夹的子分支,而可以具有用于更多文件的分支。要搜索此结构,您必须“遍历”所有分支(和子分支)以找到所需的叶子。索引使该层次结构翻转。基数成为字母,并且所有子分支都对此进行进一步细化。叶子是您要寻找的物品的位置。搜索此结构可修剪(排除)大片树(例如,搜索词的第一个字母可让您立即修剪其他25个分支)。


30

大约4年前,我也问过自己同样的问题。但是当我搜寻研究时,我最终读到了这句话,除了他们聘请最好的人来提出一些最复杂的搜索算法之外,还有其他所有东西。

他们使用的关键设计之一类似于我认为的map reduce的想法。您在农场中有很多便宜的计算机。让这些计算机仅具有约80 gig的硬盘空间,并努力使这些计算机上具有约16 gig RAM或更好的32 gig RAM(尽可能多)。请记住,它们是通过他们设计的复杂系统连接的。但是这里的关键思想是,当提交查询时,它将被传递到他们的系统中,在该系统中它将尝试搜索RAM中的新数据。请记住,他们有很多这样的廉价计算机。而且由于数据在RAM中,因此发现它的速度比硬盘上的速度快得多。但是不要忘了他们也有一个复杂的(索引和所有这些算法)系统,它们对您有很大帮助。

而且这些数据不必是新鲜的,因为我们都知道Google存储了所有数据。因此,对于RAM中应该包含的内容,可以使用与展开树相同的原理,保持人们在RAM中搜索最多的内容,并将搜索最少的内容冲洗到硬盘上。

这个小想法加上他们的索引以及其他人在答案中提到的所有其他内容,可能是它比硬盘搜索更快的原因之一。

  • 根据其他搜索进行预测的能力。
  • 数据最有可能在RAM中,我们都知道速度更快。
  • 使用多个系统进行分而治之
  • 搜索是他们的首要任务。

我当然可能错了,但这对我来说很有意义。我对所学的知识感到满意。


7
您将它钉在其他较流行的海报错过的某些事物上。Google不会经常搜索所有内容。绝对不在整个Internet上,甚至也不在其自己的缓存中包含所有内容。此外,当您在Google.com上进行搜索时,实际的搜索不是实时发生的,而是快速复制和显示了Google在过去几个月中已经产生和组织的搜索结果。描述生产/组织过程非常复杂,但是正如有人所说,它可以被模糊地称为“索引编制”。
Joseph Myers

描述生产/组织过程极其复杂。是的,这就是我所说的复杂部分。竖起大拇指,您总结得很好。
触摸

1
@JosephMyers谷歌不断索引。搜索当天早些时候在SuperUser上提出的问题(例如google.com/search?q=google+faster+than+than+a+hard+drive),该问题就会显示在结果中。
布莱德·帕顿

@Touch我同意在RAM中进行搜索。这是我有关缓存的文章的第四点
Brad Patton

@布拉德·帕顿 我不得不提到它,因为它是我学到的基础。而关于不断索引的部分,很好的是索引部分是组织部分。因此,该语句认为您搜索的是当前组织的内容,而不是正在索引的内容。至于为什么显示结果,stackoverflow具有比许多网站更高的信誉,因此,最好对它进行频繁索引。这就是为什么它出现。如果不是这样,您将需要等待一两天,然后搜索内容才能显示出来。我认为这就是约瑟夫·迈尔斯先生所说的。
触摸

20

Google使用了极为复杂的索引系统,并行操作以及许多标准单机无法使用的负载平衡技术。网络搜索和硬盘文件搜索之间几乎没有相似之处,并且google针对其特定用例进行了大量优化。


4

2004年,一些Google员工发表了一篇论文:MapReduce从那时起,他们改进了数百倍。

此外,他们使用Google文件系统(GFS),它是一种分布式文件系统,例如Hadoop分布式文件系统(HDFS),并针对其目的进行了优化。据我所知,GFS的工作速度可能比HDFS快一千倍。


2

我以为我会补充一点,因为不久前我也有这个问题,并且发现了这些很棒的视频,它们描述了Google在表面上的所作所为。有趣的观看。

Google on Youtube 1
Google on Youtube 2

他走得更深,但不够深,以至于您迷失了技术。

干杯。


1

只需在此处添加一些精彩答案即可。Google使用流行搜索短语的缓存。这些搜索的结果驻留在内存中。因此,如果您搜索的内容很多,结果将立即显示出来。


0

要简单地回答这个问题:假设您有一本教科书的背面带有关键字索引。

搜索硬盘(至少天真的)就像逐页浏览书本,扫描每一行以查找关键字。

使用Internet搜索引擎就像在索引中查找关键字,然后直接转到其给出的页码。

当然,实际上,这要复杂得多。例如,您通常会在硬盘上搜索与Internet不同类型的信息。但是最基本的是搜索引擎正在使用索引。它已经逐字逐句地浏览过“书”,并且已经汇编了这些单词以及在哪里可以找到它们的列表,并且以一种可以快速查找其中内容的方式组织了该列表。 。

例如,考虑一本书中索引的组织。首先,它通常按字母顺序排序,其次,它可能具有字母标题。在索引中查找单词时,您会立即看到以所需字母开头的单词列表。而且由于列表是经过排序的,因此很容易在列表中找到您想要的单词,也可以快速告诉您是否缺少该单词。

总而言之,就像您的硬盘上只有一本书,而搜索引擎上却有索引。尽管正如其他人指出的那样,可以使用软件对硬盘进行索引,然后可以使用索引而不是整个索引。


-1

我想Google出现Auto Complete并使用的原因之一AJAX是速度问题。现在,当您键入内容时,单词会在后台发送,因此Google可以在您尚未完成操作时完成部分工作。另外,索引基于多个单词组合(您可以在页面底部作为建议找到)。当前,网络速度高于硬盘驱动器,并且这些索引中的大部分可能驻留在其场中服务器的RAM中。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.