是什么让Everything的文件搜索和索引如此高效?

时间:2017-12-07 02:21:30

标签: performance search data-structures file-search

Everything是一个文件搜索程序。由于其作者尚未发布源代码,我想知道它是如何工作的。

  • 如何有效地索引文件?
  • 它用于文件搜索的数据结构是什么?
  • 如何快速搜索文件?

引用其常见问题解答,

  

"一切"只索引文件和文件夹名称,通常需要一个   几秒钟来建立自己的数据库。全新安装的Windows 10   (大约120,000个文件)将需要大约1秒的索引。百万   文件大约需要1分钟。

如果索引整个Windows 10只需一秒钟,并且只需1分钟就可以索引一百万个文件,这是否意味着它可以每秒索引120,000个文件?

要快速搜索,必须有一个特殊的数据结构。按文件名搜索不仅仅从头开始搜索,而且在大多数情况下也从中间搜索。这使得一些广泛使用的索引结构如TrieRed–black tree无效。

常见问题解答进一步澄清。

  

" Everything"占用我的系统资源?

     

不,"一切"使用非常少的系统资源。全新安装   Windows 10(大约120,000个文件)将使用大约14 MB的ram和更少   超过9 MB的磁盘空间。 1,000,000个文件将使用大约75 MB的RAM   和45 MB的磁盘空间。

1 个答案:

答案 0 :(得分:0)

  
      
  • 如何有效地索引文件?
  •   

首先,它仅索引文件/目录名称not contents

我不知道它是否足以满足您的需求,但普通方式是使用FindFirstFile功能。编写一个简单的C程序来递归列出文件夹/文件,看看它是否足够快。通过优化的第二步是并行运行线程,但是磁盘访问可能是瓶颈,如果这样多线程会带来很少的好处。

如果这还不够,最后你可以尝试深入研究甚至更低的 Native API函数;我对这些没有经验,所以我不能给你进一步的建议。你会非常接近金属,也许Linux NTFS project有一些你需要学习的概念。

  
      
  • 它用于文件搜索的数据结构是什么?
  •   
  • 如何快速搜索文件?
  •   

嗯,你知道有很多不同的数据结构专为快速搜索而设计......作者可能会运行很多基准测试。