Voidtools旗下Everything软件为何能在1秒内完成超10万份文件的索引?
Everything极速索引的核心实现原理
你之前的认知偏差核心是默认所有文件索引都需要走上层操作系统API逐层遍历文件,而Everything从底层逻辑上完全绕开了这套流程,核心技术逻辑如下:
- 直接读取NTFS底层元数据,不做文件遍历
Everything仅支持NTFS格式的存储分区,它不会调用常规的FindFirstFile/FindNextFile这类Win32文件遍历API,而是直接读取NTFS分区的主文件表(MFT):这是NTFS文件系统内置的元数据数据库,存储了分区内所有文件、文件夹的名称、路径、物理地址等全量元数据,本身体积非常小,几TB的分区MFT通常仅几百MB量级,线性读取解析的速度极快,完全不需要逐层遍历目录树。
增量更新阶段它会直接消费NTFS的USN变更日志,这个日志会实时记录所有文件的增删改操作,只需要消费日志条目就能更新索引,不需要重新扫描全分区。 - 索引结构极度轻量化
Everything默认仅索引文件名和路径两个核心字段,不会默认索引文件内容、修改时间、大小等额外属性,也不会做文件内容分词这类重计算操作,单文件对应的索引数据只有几十字节,10万份文件的全量索引体积仅几MB,构建索引时只需要做简单的字段映射写入,几乎没有计算开销。 - 跳过上层IO冗余开销
Everything请求管理员权限运行的核心原因就是要直接调用内核级的磁盘读取接口,绕开了上层文件系统的权限校验、缩略图生成、安全软件扫描等冗余流程,纯裸IO读取元数据的速度比常规文件遍历快1~2个数量级。
你之前测试的普通文件遍历循环,走的是上层通用API,每一步遍历都要处理大量非必要的逻辑,还要承受目录树递归遍历的额外开销,速度自然远低于Everything的实现方案。
内容的提问来源于stack exchange,提问作者ym_wp
相关产品推荐
相关产品推荐

