为了更快地访问文件,我应该搜索所有子文件夹,还是只将它们放在一个文件夹中,而不是搜索



假设我在一个文件夹中有数百万个文件被分为子文件夹,其中大多数都是大约250kb以上的图片。。

当我想联系他们的时候,我需要花很多时间来获取那个文件,因为我需要搜索所有的子文件夹。

文件夹树如下所示:

      |D
   |B |
   |  |E
 A |
   |  |F
   |C |
      |G

只是为了让它更容易理解,比如

A       : is my area. 
B,C     : are my buildings on that area.
D,E,F,G : are my flats of the buildings.

所有这些公寓都可以在建筑物之间以及与其他公寓之间改变位置

      |G                |F                |E
   |B |              |B |              |B |
   |  |D             |  |G             |  |F
 A |         OR    A |         OR    A |       
   |  |E             |  |D             |  |G
   |C |              |C |              |C |
      |F                |E                |D

因此,要想知道那套公寓在哪里,我需要穿过该区域下的所有建筑。。

处于这样的位置。如果我等待对所有文件放在一起的一个文件夹进行排序。。它会比搜索许多子文件夹更快吗?

编辑:我现在不太了解文件系统,但我使用的是win7,在我的磁盘上,显示为NTFS的文件系统也有一个带有NTFS文件系统的网络磁盘。

如果知道要打开的文件的路径,那么当它嵌套在一系列子目录中时找到它通常比在一个大目录中找到文件更快。当然,这一切都取决于您的文件系统,所以测试不会有什么坏处。

澄清:如果你必须在不同地方的批次中搜索文件,实际上这可能会更慢。如果你有这么多文件,最快的解决方案是让你的文件系统更容易:将每个文件的位置存储在一个数据库中,该数据库将每个(唯一命名的)"平面"映射到其完整路径名。通过这种方式,您可以通过一个open调用访问每个文件,并且文件系统会很快找到它,因为中间子目录保持较小(ish)。

不同的文件系统执行不同。你在用哪一个?

从历史上看,文件系统在包含大量文件(例如,数万个或更多文件)的目录中遇到了很多问题,因为它们使用O(n)算法在目录中进行搜索。像ext3、ext4和xfs这样的大多数现代文件系统都没有这个问题。

为了找出哪种结构更适合您,您需要自己对不同的情况进行基准测试(一定要注意内核的目录名查找缓存是热的还是冷的),或者研究其他人已经对您的特定文件系统进行过的基准测试。

最新更新