Everything Search Engine這款軟體如何做到如此快速的搜尋的
1. Everything只能搜尋檔名和資料夾名,Windows搜尋可以搜尋檔名和檔案內容;
2. Everything只能搜尋NTFS格式的檔案系統,Windows搜尋可以搜尋任意檔案系統(例如FAT32,exFAT,NTFS);
但有時我們需要的恰好就是快速搜尋檔名,那麼Everything的工作原理是如何呢?
先簡單介紹一下NTFS的兩個功能,MFT和USN journal。
Master File Table (MTF)
在NTFS檔案系統中,有一個特殊的表,稱為MTF表。所有資料夾和檔案的名稱都被儲存在該表中,訪問該表的速度非常快,使應用程式可以不遍歷檔案系統就能獲取當前卷(磁碟)中的所有檔案的名稱和路徑。
USN journal
NTFS還有一個日誌功能。所有對檔案系統有修改的操作都被記錄在了一個journal日誌檔案中。
Everything的原理
程式啟動時,掃描系統所有NTFS卷(磁碟)的MTF表,將檔名稱以一種利於字串檢索的演算法形式儲存在Everything的index索引資料庫中。
系統執行過程中,Everything還會監控NTFS卷的journal日誌檔案,如果檔案系統中的檔案發生改變,Everything會更新它的index索引資料庫。
當用戶搜尋檔案時,Everything利用字串查詢演算法,在index索引資料庫中查詢,可以直接搜尋到檔案。
那麼,現在回答題主問題。
Q:Search Everything 這款軟體如何做到如此快速的搜尋的?
A:因為Everything在搜尋時,根本沒有遍歷檔案系統,它檢索的是自己組織好的索引資料庫,因此搜尋速度飛快;
Q:Windows搜尋時什麼原理?
A:Windows搜尋用的是普通的檔案系統遍歷查詢。用的應該是標準WIN32 API,例如FindFirstFile/FindNextFile之類。當然,Windows7之後的版本現在已經內建帶索引的搜尋功能,這項功能非常複雜,不僅可以搜尋檔名,還可以搜尋檔案內容,而且適用任意檔案系統。但缺點就是需要一個後臺服務爬蟲不停的對檔案系統進行索引,比較耗資源。
Q:為何微軟不使用這種原理?
A:個人覺得是因為這種方法不具備普適性,無法應用與非NTFS檔案系統,所以無法整合到Windows中。
A: 個人感覺還是技術含量不太高,而且微軟自家的ActiveDirectory早就在使用MTF快速檢索檔案了。