一个目录里面有太多文件会出现问题吗?在Windows和Linux系统中,需要限制目录下的文件数量吗?

28

1
尝试做什么时会出现性能问题? - Dr. belisarius
2
这个问题就像是“有多少用户或进程太多?” 它完全取决于上下文、活动和你对“太多”的定义。答案可能在100到1000万之间。 - msw
重复:https://dev59.com/iXRB5IYBdhLWcg3w7reV https://dev59.com/L3VC5IYBdhLWcg3wvT5a - leonbloy
4
不是重复的问题。另一个问题只涉及 Linux(不涉及 Windows),并且只讨论了硬限制,而没有讨论当目录中有很多条目时出现性能问题的实际考虑因素。这个问题在关闭之前吸引了至少一个回答,其中包含其他问题上没有的好信息。 - Adrian McCarthy
2个回答

20
根据这篇微软文章,目录的查找时间与条目数量的平方成正比增加。(虽然这是针对NT 3.5的一个错误)
旧的Joel on Software论坛上曾经提出类似的问题。其中一个答案是,在1000到3000个文件之间性能会下降,并且有一个用户在18000个文件时达到了硬限制。还有一篇帖子声称可以处理300,000个文件,但是随着所有8.3文件名被耗尽,搜索时间会迅速下降。
为避免大型目录,可创建一个,两个或多个级别的子目录,并将文件散列到这些目录中。最简单的哈希类型使用文件名的字母。因此,以abc0001.txt开头的文件将被放置在a\b\c\abc0001.txt中,假设您选择了3个嵌套级别。三个可能过度设计——每个目录使用两个字符可以减少嵌套级别数量。例如:ab\abc0001.txt。如果您预计任何目录的文件数量将远远超过约3000个,则只需要进入两个级别的嵌套。

我在网络服务器上使用两层嵌套的子目录 A-Z+0-9 的经验并不理想。由于某种原因,Windows 似乎需要很长时间来枚举文件,即使每个单独的子目录只包含大约 10 个或更少的文件。 - Mark Ransom
我可以确认,在NTFS上每个文件夹可以容纳近250,000个文件。如果您调整Windows资源管理器的设置,实际上速度并不像您想象的那样慢。 - Timothy Gonzalez

13

Windows文件系统目前采用NTFS格式,一个卷中最多可容纳4,294,967,295个文件。该驱动器上的文件编目采用B+树结构,可实现Log(N)查找。

在旧的FAT32中,每个文件夹中最多只能有64K个文件,索引也是按照每个文件夹单独列出的列表进行的,因此在几千个文件后性能会急剧下降。除非您的受众使用DOS、Windows 95、98或Millenium(Yuck),否则您可能不需要担心FAT32。

在Linux中,这取决于您使用的文件系统(如果您决定使用NTFS,则可能是NTFS)。extf3每个目录的限制为32k个文件。查找也是B+树,将为您提供LOG(N)查找。

进一步看来,您的问题应该真正涉及到文件系统的限制。


7
如果他想知道硬性限制,那就是他本应该问的。存在一些“软性”限制,当表现不理想时会遇到这些软性限制,而在达到硬性限制之前,你会先遇到这些软性限制。 - Robert Harvey
这个答案对我来说非常完美。标题没有暗示难或软 - 所以用户会为了两者而来到这个问题,想必如此。 - Xonatron

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接