2010-06-08 58 views
15

可能重复:
How many files in a directory is too many?目录中有多少文件太多(在Windows和Linux上)?

有人告诉我,把太多的目录中的文件可能会导致在Linux和Windows的性能问题。这是真的?如果是这样,避免这种情况的最好方法是什么?

+0

尝试做什么时出现性能问题? – 2010-06-08 03:09:18

+2

这个问题就像“有多少用户或进程太多?”。它完全基于上下文,活动以及您对“太”的定义。 答案可能在100到1000万之间。 – msw 2010-06-08 03:09:21

+0

重复:http://stackoverflow.com/questions/466521/how-many-files-in-a-directory-is-too-many http://stackoverflow.com/questions/197162/ntfs-performance-and-大容量的文件和目录 – leonbloy 2010-06-08 03:10:12

回答

10

根据this Microsoft article,目录的查找时间与条目数量的平方成正比。 (虽然这是对NT 3.5的一个错误)。

Old Joel on Software Forum上提出了类似的问题。一个答案是,性能似乎下降了1000到3000个文件,一个海报达到了18000个文件的硬限制。还有一篇文章宣称可能有300,000个文件,但所有8.3文件名用完后搜索时间迅速减少。

要避免大目录,请创建一个,两个或更多级别的子目录,并将这些文件散列到这些目录中。最简单的散列使用文件名的字母。因此,假设您选择了3个嵌套级别,则将一个以abc0001.txt开头的文件放置为\ b \ c \ abc0001.txt。 3可能是矫枉过正的 - 每个目录使用两个字符减少了嵌套级别的数量。例如ab\abc0001.txt。如果您预计任何目录的数量都大于ca,那么只需要进行两级嵌套。 3000个文件。

+0

我在网络服务器上使用两层嵌套子目录A-Z + 0-9的经验是有问题的。由于某些原因,Windows似乎要永远枚举这些文件,尽管每个子目录都包含大约10个或更少的文件。 – 2010-06-08 03:44:14

+0

我可以确认您可以在NTFS上获得每个文件夹近250,000个文件。实际上,如果您调整Windows资源管理器设置,其速度并不像您想象的那么慢。 – 2017-09-26 22:53:00

8

Windows文件系统目前是NTFS。卷上的文件最大数量为4,294,967,295。驱动器上的文件编目发生在一个B +树中,该B +树为您提供日志(N)查找。

在旧的FAT32上,文件夹中存在64K文件的限制。索引也是通过每个文件夹的列表来完成的,因此在几千次的性能大幅下降之后。你可能不需要担心FAT32,除非你的观众有DOS,Windows 95,98或Millenium(Yuck)。

在Linux上,它确实取决于您正在使用的文件系统(如果您决定这么做,它可能是NTFS)extf3对每个目录有32k个文件的限制。查找也是B +树,并会给你日志(N)查找

通过进一步查看这个问题后,你的问题应该是关于文件系统的限制。

+3

如果他想知道硬性限制,那他就会问。在性能变得不理想的情况下存在“软”限制,并且在达到硬限制之前就会遇到这些软限制。 – 2010-06-08 14:57:41