題 為什麼Google比硬盤搜索更快?


當我在Windows 7或Windows XP中搜索我的高清文件時,需要幾分鐘才能完成該過程。如果我在Google中填寫搜索字詞,答案就會在我的屏幕上以毫秒為單位

谷歌如何能夠比我的硬盤驅動器搜索比我的硬盤驅動器大很多倍的互聯網?這只是計算能力和正確算法的問題嗎?


247
2018-04-03 18:44


起源


您是否嘗試索引驅動器上的所有文件並僅搜索索引?嘗試 一切 並看到。 - Karan
谷歌桌面“用於”為Windows做到這一點... - rogerdpack
谷歌搜索存儲在RAM中的索引,而不是通過硬盤驅動器上的文件。 - Ari
索引很重要,但Google也使用map-reduce算法來執行大規模並行操作。無論您的計算機擁有多少核心,我都保證Google擁有更多核心。 - Adam Wuerl
沒有什麼能阻止桌面搜索實現使用索引。 然而,請記住,谷歌有足夠的現金用於a)許多非常快的CPU /服務器來並行查詢; b)許多非常快的RAM,以避免必須訪問磁盤; c)許多硬盤比你使用的硬盤快得多; d)許多非常聰明的工程師來優化所涉及的算法。 (例如,緩存(很多)經常使用的查詢的結果以及更多。)這不是“唯一”這兩個問題的問題,所有這些都是一致行動的。 - millimoose


答案:


谷歌沒有搜索互聯網:它正在搜索索引。谷歌有龐大的服務器農場,不斷掃描和索引互聯網。此過程需要花費大量時間,就像搜索未編制索引的硬盤一樣。在Windows 7中,可以選擇索引硬盤驅動器。這個過程最初需要一些時間,但一旦啟動並運行,搜索結果將是即時的。

如果您想了解更多關於Google搜索的工作原理,請閱讀Google的文章“搜索如何工作“或閱讀文章”功能如何:Google的工作原理“。


210
2018-04-03 18:53



最後一段: 這個鏈接 更具權威性和整體性。 - ulidtko
請原諒我的好奇心,但不要 文件系統 已經索引磁盤上的文件?您在文件資源管理器中看到的不僅僅是指向磁盤上實際物理扇區的鏈接的索引嗎?那麼,為什麼我們需要這樣做 更 索引? - Adi
@Adnan文件系統索引旨在查找文件存儲在物理介質上的位置。它就像是一本書的索引,它告訴你章節的哪一頁開始。搜索索引旨在查找內容。一個好的搜索索引不僅索引文件名,還有已知文件類型的內容,如pdf,doc,html,......高級索引也使用同義詞,所以如果你搜索“car”,它也可以找到結果“汽車”這個詞。 - Simon
@Adnan,文件系統並不是真正的“索引”,只是一個文件名樹。搜索這樣的樹並不快,因為它的結構沒有針對搜索進行優化。 OTOH谷歌(和數據庫)使用特定的排序索引結構,這使得快速查找特定條目閃電。即便如此,並非所有搜索都能從這樣的索引中受益,而且速度很慢(呃)。 - PiRX
@Adnan從某種意義上說,FS Tree已經過優化 反對 搜索。它旨在允許尋址已知位置。從您的根節點,您獲得的是root下的目錄和文件列表。每個目錄只知道其中的文件以及它下面的目錄。在此下訪問已知的文件路徑非常快,並且它提供了很大的靈活性,但是不存在要搜索的全局文件列表。您必須始終通過目錄樹,這會產生大量不同的查找。 - Phoshi


谷歌就像在黃頁上搜索一個地址(索引)。 Windows搜索類似於驅動檢查建築物上的數字(非索引)。

另一個類比是通過一個組織良好的圖書館和卡片目錄,或者每次只是整理一堆無組織的書籍。

從根本上說,這是在搜索之前完成的所有組織工作,使其變得更快。

僅供參考:搜索索引位置時,Windows搜索可以同樣響應。


71
2018-04-03 21:09



或者:掃描教科書與查看(詳細)目錄 - bobobobo


谷歌的業務是搜索(並提供廣告),它非常關注這一點。 Google會採取一些措施來確保數據快速返回給您:

  • 首先它使用 MapReduce的 和 網頁排名 生成萬維網的綜合索引。它定期更新,以便結果新鮮。
  • 該索引在Google的許多服務器上分發和復制
  • 您的查詢將分散在多個服務器上以構建返回的結果。這允許該過程高度並行化。
  • 緩存常見查詢和結果,從而減少了執行搜索的需要。

有關詳細信息,請參閱此鏈接 搜索如何工作

相比之下,沒有索引的硬盤搜索必須讀取驅動器上的每個文件,這可能需要很長時間。

此外,您可以將文件系統和索引都視為樹。在文件系統中,樹的根是頂級文件夾,它可以在該文件夾中包含分支(文件夾)或葉子(文件)。每個分支可以具有用於更多文件夾的子分支,並且用於更多文件。要搜索此結構,您必須“遍歷”所有分支(和子分支)以查找您要查找的葉子。索引會翻轉此層次結構。基數成為字母表,所有子支行都對此進行了進一步的改進。樹葉是您要查找的項目的位置。搜索此結構允許您修剪(排除)樹的大部分(例如,搜索項的第一個字母允許您立即修剪25個其他分支)。


36
2018-04-03 20:44





大約4年前,我也問了同樣的問題。但是當我搜索我的研究時,我最終讀到了這一點,除了他們僱用最好的最好的東西來提出一些最複雜的搜索算法和所有這些。

他們使用的一個關鍵設計類似於我認為的地圖縮減的想法。你在農場上有很多便宜的電腦。讓這些計算機只有大約80 GB的硬盤空間,並努力在這些計算機上盡可能地擁有大約16 GB的RAM甚至更好的32 gig RAM(盡可能多)。請記住,他們通過他們設計的一些複雜系統連接起來。但這裡的關鍵思想是,當提交查詢時,它會被傳遞到他們的系統,在那裡它將嘗試搜索RAM中的新數據。請記住,他們有很多這些便宜的電腦。由於數據在RAM中,因此發現它比在硬盤上快得多。但是不要忘記他們有一個複雜的(索引和所有那些算法)系統也有很大幫助。

這些數據不一定是新鮮的,因為我們都知道Google存儲了所有內容。至於什麼應該在RAM中,可以使用與splay樹相同的原則,保持人們在RAM中搜索最多的東西並將搜索次數最少的東西刷新到硬盤。

這個小小的想法加上他們的索引以及其他人在他們的答案中提到的所有其他事情,可能是它比硬盤搜索更快的原因之一。

  • 基於其他搜索進行預測的能力。
  • 數據很可能在RAM中,我們都知道它更快。
  • 使用多個系統 分而治之
  • 搜索是他們的主要優先事項。

當然我可能是錯的,但這對我來說很有意義。我對自己所學到的東西感到滿意。


30
2018-04-03 22:57



你把它釘在了其他更受歡迎的海報錯過的一些東西上。 Google不會經常搜索所有內容。絕對不是在整個互聯網上,甚至在自己的緩存中都沒有。此外,當您在Google.com上進行搜索時,實際搜索不會實時發生,只需快速復制並顯示Google過去幾個月已經製作和整理的搜索結果。描述生產/組織過程非常複雜,但有人說它可以模糊地稱為“索引”。 - Joseph Myers
描述生產/組織過程非常複雜......。是的,這就是我所說的複雜部分。豎起大拇指,你總結得很好。 - Touch
@JosephMyers谷歌索引不斷。在當天早些時候搜索SuperUser上提出的問題(例如, google.com/search?q=google+faster+than+a+hard+drive)它出現在結果中。 - Brad Patton
@Touch我同意在RAM中搜索。這是我關於緩存的帖子中的第四點 - Brad Patton
@Brad Patton True。我不得不提到它,因為它是我學到的東西的基礎。而關於索引的部分不斷,索引部分就是一種組織部分。因此,該聲明認為您可以搜索已組織的內容,而不是當前正在編制索引的內容。至於結果顯示的原因,stackoverflow比許多網站更具可信度,因此最好更頻繁地對其進行索引。這就是它出現的原因。如果不是這樣的話,你必須等待一兩天才能顯示搜索結果。我認為這就是JosephMyers先生所說的。 - Touch


Google使用極其複雜的索引系統,並行操作以及標準獨立計算機無法使用的許多負載平衡技術。網絡搜索和硬盤文件搜索之間幾乎沒有相似之處,谷歌針對他們的特定用例進行了大量優化。


20
2018-04-03 18:49





2004年,一些谷歌員工發表了一篇論文: MapReduce的 從那時起,他們改進了數百次。

此外,他們使用 谷歌文件系統(GFS) 這是一個像分佈式文件系統 Hadoop Distribud文件系統(HDFS) 並針對其目的進行了極為優化。據我所知, GFS 工作的速度可能要快一千倍 HDFS


4
2018-04-04 06:49





我想我會加入這個,因為我前一段時間也有這個問題,並發現這些偉大的視頻描述了谷歌在表面上做了什麼。有趣的是觀看。

谷歌在Youtube 1上
谷歌在Youtube 2上

他走得更深,但不夠深,以至於你在技術上迷失了方向。

乾杯。


2
2018-04-04 00:14





只需在這裡添加一些精彩的答案。 Google使用熱門搜索詞組的緩存。 這些搜索的結果存在於內存中。因此,如果您搜索經常搜索的內容,結果將立即顯示出來。


1
2018-04-08 06:34