Everything是很多人都很喜欢的一款Windows上的搜索引擎,它比Windows内置的搜索要快得多得多。
Everything的工作原理在了解Everything如何工作之前,我们还需要理解NTFS的两个功能,MFT和USN
journal。MFT(Master File
Table)NTFS文件系统中,有一个特殊的MFT表,它位于每个NTFS分区的根目录中,名为$MFT。所有文件夹和文件的名称都存储在这样一张表中,但不能通过用户模式API进行访问。
USN
journalNTFS文件系统还拥有一个日志功能,它最初是一个空文件,每当对卷进行更改时,一条记录就会被添加到$Extend\$UsnJrnl的NTFS元文件中。它并不包含与更改相关的所有数据或详细信息,因此更改这个日志不能对NTFS中的文件进行 *** 作。
Everything在启动时会扫描系统所有的NTFS卷的MTF表,将文件名称以一种利于字符串检索的算法形式存储在Everything的index索引数据库中。除此之外,Everything还会在系统运行过程中监控NTFS卷的USN日志文件,假如文件系统中的文件发生了改变,那么Everything就会更新它的index索引数据库。
由于Everything并不索引文件具体内容,并且依赖USN日志来过滤文件更新,因此只需要占用很少的内存和处理器时间。Everything的索引过程和搜索过程非常快速,几乎是一瞬间完成,占用系统资源极低,同时能实时更新索引数据库和搜索结果,这些优点使得在磁盘容量越来越大、用户文件越来越多的情况下广受欢迎。
Everything和Windows内置搜索的区别Windows内置搜索用的是普通的文件系统遍历查找,比如:FindFirstFile/FindNextFile之类的。当然Windows
7之后的版本也内置带索引的搜索功能,但非常复杂,不仅可以搜索文件名,还可以搜索文件内容,而且适用于任意文件系统。缺点就是需要一个后台服务爬虫不停地对文件系统进行索引,所以非常耗资源。
Everything在搜索时,根本没有遍历文件系统,它检索的是自己组织好的索引数据库,所以搜索速度是飞快的。不过Everything需要管理员权限才能读取USN日志,这会带来安全上的问题。
Everyting搜索功能会损伤硬盘吗?不管是那一款快速搜索软件,想要搜索更快,就需要在遍历后形成索引。这个索引文件需要写在硬盘上,并且会更新,但通常这个索引文件都不会很大。对硬盘的造成的伤害可以忽略不计,它和我们拷贝到硬盘一个同等体积的文件相差并不大。
举个例子:Everything索引一个全新安装的Windows
10(大约120000个文件)仅需要大约14MB的内存以及不到9MB的硬盘空间,仅需要1秒就可以索引完成。如果是一百万个文件大约需要75MB的内存和45MB的硬盘空间,索引完成大约需要1分钟。
这点损耗对比于Windows内置的搜索来说可谓是微乎其微,Windows内置的搜索不管你用不用,它默认都在工作。为什么微软不去做一个Everything?对于专业人士来说,毫无疑问Windows内置的搜索真的糟得一塌糊涂,但Windows本身是为广大的普通用户提供一个通用的使用平台,如果叫普通人去使用布尔运算符、通配符、正则表达式来快速的索引文件反而有点不现实。
所以微软要去权衡全球用户的接受程度,但微软可以提供接口,让开发者去充分发挥想象空间,这就是平台和生态圈的概念了。
还有一种可能是设置里面没选择“自动移除离线卷”,即这个文件是移动硬盘或优盘等外接设备里面的文件,而外接设备已经拔掉了,所以打不开了,everything显示的是之前建立的索引记录而已。你可以把“自动移除离线卷”这一项选中,试试能不能搜到你所说的文件,如果搜不到,说明就是我所说的这种情况。
以上是我的个人经验,仅供参考。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)