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

Arn*_*rne 257 windows hard-drive google-search windows-search

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

Google 怎么可能搜索互联网,它比我的硬盘大很多倍,速度比我的操作系统搜索我的电脑快?仅仅是计算能力和正确算法的问题吗?

Sim*_*mon 215

谷歌不是在搜索互联网:它是在搜索索引。谷歌拥有庞大的服务器群,它们不断地扫描和索引互联网。这个过程需要很多时间,就像搜索未编入索引的硬盘一样。在 Windows 7 中,有一个选项可以为您的硬盘驱动器编制索引。这个过程起初需要一些时间,但一旦启动并运行搜索结果将是即时的。

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

  • 最后一段:[此链接](http://www.google.com/insidesearch/howsearchworks/thestory/) 更权威,整体更好。 (47认同)
  • @Adnan 文件系统索引旨在查找文件在物理介质上的存储位置。它就像一本书的索引,告诉您一章从哪一页开始。搜索索引旨在查找内容。一个好的搜索索引不仅可以索引文件名,还可以索引已知文件类型的内容,例如 pdf、doc、html... “汽车”这个词。 (9认同)
  • @Adnan 从某种意义上说,FS 树是针对*搜索进行优化的。它旨在允许对已知位置进行寻址。从您的根节点,您得到的只是根目录下的目录和文件列表。每个目录只知道其中的文件,以及它下面的目录。在这种情况下,访问已知文件路径非常快,并且提供了很大的灵活性,但不存在要搜索的全局文件列表。您必须始终向下遍历目录树,这会导致许多不同的查找。 (8认同)
  • 请原谅我的好奇心,但 [文件系统](https://en.wikipedia.org/wiki/File_system) 不是已经索引磁盘上的文件了吗?您在文件浏览器中看到的内容不只是指向磁盘上实际物理扇区的链接索引吗?那么,为什么我们需要做_甚至更多_索引? (4认同)
  • @Adnan,文件系统并不是真正的“索引”,只是文件名树。搜索这样的树并不快,因为它的结构没有针对搜索进行优化。OTOH 谷歌(和数据库)使用特定的排序索引结构,这使得查找特定条目的速度快如闪电。即便如此,并非所有搜索都可以从此类索引中受益,并且速度会很慢(呃)。 (3认同)

小智 72

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

另一个类比是浏览组织良好的图书馆和卡片目录,或者每次只是整理一堆杂乱无章的书籍。

从根本上说,是在搜索之前完成的所有组织工作使其快速。

仅供参考:在搜索索引位置时,Windows 搜索的响应速度相同。

  • 或者:扫描教科书与查看(详细)目录 (5认同)

Bra*_*ton 36

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

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

有关搜索工作原理的更多信息,请参阅此链接

相比之下,没有索引的硬盘搜索必须通读驱动器上的每个文件,这可能需要很多时间。

此外,您可以将文件系统和索引都视为一棵树。在文件系统中,树的根是顶级文件夹,在该文件夹中可以有分支(文件夹)或叶子(文件)。每个分支可以有更多文件夹的子分支和更多文件的叶子。要搜索此结构,您必须“走”所有分支(和子分支)以找到您要查找的叶子。索引翻转了这个层次结构。基础成为字母表,所有的子分支都在此基础上进一步改进。叶子是您要查找的项目的位置。搜索此结构可让您修剪(排除)树的大部分(例如,搜索词的第一个字母可让您立即修剪 25 个其他分支)。


Tou*_*uch 30

大约 4 年前,我也问过自己同样的问题。但是当我在 google 周围做我的研究时,我最终读到了这样一个事实,除了他们聘请了最优秀的人来提出一些最复杂的搜索算法等等。

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

而且这些数据不一定是新鲜的,因为我们都知道 Google 会存储所有内容。至于应该在RAM中的内容,可以使用与展开树相同的原则,将人们搜索最多的内容保留在RAM中,并将搜索最少的内容刷新到硬盘。

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

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

当然我可能是错的,但这对我来说是有道理的。我对我学到的东西很满意。

  • 你把它钉在了其他更受欢迎的海报错过的一些东西上。Google 不会经常搜索所有内容。绝对不是在整个互联网上,甚至不是在它自己的缓存中的所有内容。此外,当您在 Google.com 上搜索时,实际搜索并不是实时进行的,只是快速复制和显示 Google 在过去几个月中已经生成和组织的搜索结果。描述制作/组织过程极其复杂,但正如有人所说,它可以被模糊地称为“索引”。 (7认同)

Fra*_*mas 20

Google 使用极其复杂的索引系统、并行操作和许多标准独立计算机所不具备的负载平衡技术。网络搜索和硬盘文件搜索之间几乎没有相似之处,谷歌针对它们的特定用例进行了大量优化。