当我在Windows 7或Windows XP中的HD上搜索文件时,需要几分钟才能完成该过程。如果我在Google中填写搜索字词,答案就会在毫秒内显示在我的屏幕上
Google如何搜索比硬盘大很多倍,比我快的互联网?操作系统可以搜索我的计算机吗?仅仅是计算能力和正确算法的问题吗?
#1 楼
Google不在搜索互联网:它正在搜索索引。 Google有庞大的服务器场,这些服务器场正在不断扫描和索引互联网。这个过程需要很多时间,就像搜索未索引的硬盘一样。在Windows 7中,有一个索引硬盘的选项。此过程最初需要一些时间,但是一旦启动并运行,搜索结果就会立即显示。如果您想进一步了解Google搜索的工作原理,可以阅读Google的文章“如何搜索”或阅读文章“工作原理:Google的工作原理”。
评论
最后一段:此链接更具权威性,总体上更好。
– ulidtko
13年4月3日在21:03
出于好奇,请问文件系统是否已为磁盘上的文件建立索引?您不是在文件资源管理器中看到的仅仅是指向磁盘上实际物理扇区的链接的索引吗?那么,为什么我们需要做更多的索引工作呢?
–阿迪
13年4月4日在7:30
@Adnan文件系统索引旨在查找文件在物理介质上的存储位置。就像一本书的索引一样,它告诉您一章从哪一页开始。搜索索引旨在查找内容。一个好的搜索索引不仅可以索引文件名,还可以索引已知文件类型的内容,例如pdf,doc,html等。高级索引还使用同义词,因此,如果您搜索“ car”,则可能会找到结果。 “汽车”一词。
–西蒙
13年4月4日在8:47
@Adnan,文件系统并不是真正的“索引”,只是一棵文件名树。搜索这样的树并不快,因为它的结构并未针对搜索进行优化。 OTOH谷歌(和数据库)使用特定的排序索引结构,可快速查找特定条目。即使这样,并非所有搜索都可以从这种索引中受益,并且搜索速度会变慢。
–PiRX
13年4月4日在10:36
@Adnan从某种意义上说,FS树针对搜索进行了优化。它旨在允许寻址已知位置。在您的根节点上,您所获得的只是根目录下的目录和文件的列表。每个目录只知道其中的文件及其下的目录。在这种情况下,访问已知文件路径的速度非常快,并且提供了很大的灵活性,但是不存在要搜索的全局文件列表。您必须始终在目录树中下移,这需要进行许多不同的查找。
– Ph子
13年4月4日在15:28
#2 楼
Google就像在黄页上搜索地址(已索引)。 Windows搜索类似于在建筑物上检查数字(无索引)。另一个类比是浏览组织良好的图书馆和卡片目录,或者每次都对无组织的书籍进行排序。
从根本上讲,这是搜索之前完成的所有组织工作所能实现的。
仅供参考:在搜索索引位置时,Windows搜索可以像响应一样快。
/>
评论
或者:扫描教科书与查看(详细的)目录
– bobobobo
13-4-4在23:12
#3 楼
Google的业务是搜索(并投放广告),并且非常专注于此。 Google采取许多措施来确保将数据快速返回给您:首先,它使用MapReduce和PageRank来生成万维网的综合索引。它会定期对此进行更新,因此结果是新鲜的。
该索引在Google的许多服务器上分布和复制。
您的查询在多个服务器上分布,以建立返回的结果。这样就可以高度并行化该过程。
通用查询和结果被缓存,从而根本不需要执行搜索。
有关此搜索方式的更多信息,请参见此链接
/>
相比之下,没有索引的硬盘搜索必须读取驱动器上的每个文件,这会花费很多时间。
此外,您还可以将文件系统和索引都视为树。在文件系统中,树的根是顶级文件夹,并且该文件夹中可以有分支(文件夹)或叶子(文件)。每个分支可以具有用于更多文件夹的子分支,而可以具有用于更多文件的分支。要搜索此结构,您必须“遍历”所有分支(和子分支)以找到所需的叶子。索引使该层次结构翻转。基数成为字母,并且所有子分支都对此进行进一步细化。叶子是您要寻找的物品的位置。搜索此结构可修剪(排除)大片树(例如,搜索词的第一个字母可让您立即修剪其他25个分支)。
#4 楼
大约4年前,我也问过自己同样的问题。但是当我四处搜寻时,我最终读到,除了他们聘请最好的人来提出一些最复杂的搜索算法以及所有这些算法之外。其中之一他们使用的关键设计类似于我认为的map reduce的想法。您在农场中有很多便宜的计算机。让这些计算机仅具有约80 gig的硬盘空间,并努力在这些计算机上尽可能多地具有约16 gig RAM或更好的32 gig RAM。请记住,它们是通过设计的复杂系统连接在一起的。但是这里的关键思想是,当提交查询时,它将被传递到他们的系统中,在该系统中它将尝试搜索RAM中的新数据。请记住,他们有很多这样的廉价计算机。而且由于数据在RAM中,因此发现它的速度比硬盘上的速度快得多。但是请不要忘记他们也有一个复杂的(索引和所有这些算法)系统,它们也可以提供很大的帮助。
这些数据不必一定新鲜,因为我们都知道Google存储了所有内容。因此,对于RAM中应该包含的内容,可以使用与展开树相同的原理,让人们在RAM中搜索最多的内容,并将搜索最少的内容冲洗到硬盘上。
再加上他们的索引以及其他人在答案中提到的所有其他内容,可能是它比硬盘搜索更快的原因之一。
基于预测的强大功能在其他搜索上。
数据最有可能在RAM中,我们都知道更快。
使用多个系统进行划分和征服
搜索是它们的主要任务。
我当然可能错了,但这对我来说很有意义。我对所学的知识感到满意。
评论
您将其钉在其他较流行的海报错过的某些事物上。 Google不会经常搜索所有内容。绝对不在整个Internet上,甚至也不在其自己的缓存中。此外,当您在Google.com上进行搜索时,实际的搜索不是实时发生的,而只是快速复制和显示Google在过去几个月中已经产生和组织的搜索结果。描述生产/组织过程极其复杂,但是正如有人所说,它可以被模糊地称为“索引编制”。
–约瑟夫·迈尔斯(Joseph Myers)
2013年4月3日23:28
描述生产/组织过程极其复杂。...是的,这就是我所说的复杂部分。竖起大拇指,您总结得很好。
–触摸
2013年4月3日23:34
@JosephMyers谷歌不断索引。搜索当天早些时候在SuperUser上提出的问题(例如google.com/search?q=google+faster+than+than+a+hard+drive),它就会显示在结果中。
–布拉德·帕顿(Brad Patton)
13年4月4日在0:24
@Touch我同意在RAM中进行搜索。这是我帖子中关于缓存的第四点
–布拉德·帕顿(Brad Patton)
13-4-4在0:25
@布拉德·帕顿我不得不提到它,因为它是我学到的基础。而不断索引的部分,很好的是索引部分是组织部分。因此,该语句认为您搜索的是当前组织的内容,而不是正在索引的内容。至于为什么显示结果,stackoverflow具有比许多网站更高的信誉,因此最好对它进行频繁索引。这就是为什么它出现。如果不是这样,您将需要等待一两天,然后搜索内容才能显示出来。我认为这就是约瑟夫·迈尔斯先生所说的。
–触摸
13年4月4日,0:38
#5 楼
Google使用了非常复杂的索引系统,并行操作以及许多标准单机无法使用的负载平衡技术。网络搜索和硬盘文件搜索之间几乎没有相似之处,并且google针对其特定用例进行了大量优化。#6 楼
2004年,一些Google员工发表了一篇论文:MapReduce,从那时起,他们改进了数百倍。此外,他们使用Google文件系统(GFS),它是一种分布式文件系统,如Hadoop分布式文件系统(HDFS),并且针对其用途进行了优化。据我所知,GFS的工作速度可能比HDFS快一千倍。
#7 楼
我以为我会补充一点,因为不久前我也有这个问题,并且发现了这些很棒的视频,它们描述了Google在表面上的所作所为。有趣的是。Youtube 1上的Google谷歌在Youtube 2上的Google
他走得更深,但不够深入,以至于您迷失了技术。
/>干杯。
#8 楼
只需在此处添加一些精彩答案即可。Google使用流行搜索短语的缓存。
这些搜索的结果保存在内存中。因此,如果您搜索的内容很多,结果几乎会立即显示。
#9 楼
要简单地回答这个问题:假设您有一本教科书的背面带有关键字索引。搜索硬盘(至少天真地)就像逐页浏览本书一样,扫描每一行中是否有您的关键字。
使用Internet搜索引擎就像在索引中查找关键字,然后直接转到其给出的页码。
在现实中,当然要复杂得多。例如,您通常会在硬盘上搜索与Internet不同类型的信息。但是最基本的是搜索引擎正在使用索引。它已经逐字逐句地浏览过“书”,并且已经汇编了这些单词以及在哪里可以找到它们的列表,并且以一种可以快速查找其中内容的方式组织了该列表。 。
例如,考虑一本书中索引的组织。首先,它通常按字母顺序排序,其次,它可能具有字母标题。在索引中查找单词时,您会立即看到以所需字母开头的单词列表。而且由于列表是经过排序的,因此很容易在列表中找到您想要的单词,也可以快速告诉它是否丢失。
总而言之,就像您的硬盘上只有一本书一样,而搜索引擎具有索引。尽管正如其他人指出的那样,可以使用软件对硬盘进行索引,然后可以使用索引而不是整个索引。
#10 楼
我想Google出现Auto Complete
并使用AJAX
的原因之一是速度问题。现在,当您键入内容时,单词会在后台发送,因此Google可以在您尚未完成操作时完成部分工作。另外,索引基于多个单词组合(您可以在页面底部作为建议找到)。当前,网络速度高于硬盘驱动器,并且这些索引中的大部分可能驻留在其场中服务器的RAM中。
评论
您是否尝试过索引驱动器上的所有文件并仅搜索索引?尝试一切,看看。Google桌面也“用于” Windows操作系统...
Google搜索存储在RAM中的索引,而不搜索硬盘驱动器上的文件。
索引很重要,但是Google还使用map-reduce算法来进行大规模并行操作。无论您的计算机中有多少个内核,我都保证Google拥有更多的内核。
没有什么可以排除使用索引的桌面搜索实现。但是,请记住,谷歌有足够的现金用于a)许多非常快速的CPU /服务器来并行化查询; b)许多非常快的RAM,以避免曾经访问过磁盘; c)许多硬盘比您使用的硬盘快得多; d)许多非常聪明的工程师可以优化所涉及的算法。 (例如,缓存(大量)经常使用的查询的结果以及更多内容。)这不仅是这两个问题的“唯一”问题,而且还包括所有这些问题的协调作用。