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

Filesystems 为了更快地访问文件,我应该搜索所有子文件夹,还是将它们放在一个文件夹中,而不是搜索?,filesystems,directory,subdirectory,Filesystems,Directory,Subdirectory,假设我在一个文件夹中将数百万个文件分为多个子文件夹,其中大多数是大小约为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 f

假设我在一个文件夹中将数百万个文件分为多个子文件夹,其中大多数是大小约为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,都没有这个问题


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

我不知道您在那里有什么样的建筑物,这样公寓就可以在建筑物之间移动!我的公寓大部分都是固定的。。。除了有一次它情绪低落,搬到地下室住了几个月。但我说服它回到二楼。它信任我。毕竟我住在里面。@Celada哈哈,真不错。我知道它看起来真的很复杂,这就是为什么我试图用建筑物和公寓来解释。我的文件夹可以在其他文件夹之间移动,你可以看到。如果我们认为这些文件夹是物品,如果你有时需要从桌子上拿一件物品放在床上,你就无法在你的桌子上找到该物品,因此你开始搜索其他可能的位置..是的!我也这么想,接受了你的回答,因为你是第一个回答的人。谢谢。我补充了一些关于进一步思考的澄清。最大的加速将来自使用更少的文件系统。