【问题标题】:To reach a file faster, should i search trough all sub folders or just put them together in one folder than do the search?为了更快地找到文件,我应该搜索所有子文件夹还是将它们放在一个文件夹中而不是搜索?
【发布时间】:2012-03-29 14:08:35
【问题描述】:

假设我将数百万个文件分隔到一个文件夹中的子文件夹中,其中大多数是大约 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 文件系统的网络磁盘。

【问题讨论】:

  • 我不知道你那里有什么样的建筑物,这样公寓就可以在建筑物之间移动!我的公寓大部分时间都在原地不动......除了有一次它变得沮丧并搬到地下室住了几个月。不过,我说服了它回到二楼。它信任我。毕竟我住在里面。
  • @Celada 哈哈,不错。我知道它看起来非常复杂,这就是为什么我试图用建筑物和公寓来解释。如您所见,我有在其他文件夹之间移动的文件夹。如果我们认为这些文件夹是物品,并且如果您有时需要从办公桌上拿一个物品放在床上,那么您将无法在您的办公桌上找到该物品,那么您就开始搜索它可能在的其他位置..跨度>

标签: filesystems directory subdirectory


【解决方案1】:

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

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

【讨论】:

  • 是的!这也是我的想法并接受了你的回答,因为你是第一个回答的人。
  • 谢谢。我已经对进一步的反思添加了一些说明。最大的加速将来自于更少使用文件系统。
【解决方案2】:

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-05-02
    • 2016-01-20
    • 2014-06-26
    • 1970-01-01
    • 2015-08-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多