目录中有多少个文件?(从网络下载数据)


19

问候,

我正在编写一些脚本来处理来自各种照片网站的图像。现在,我将所有这些数据存储在同一目录中的单个文本文件中。

该目录可通过Web访问。最终用户调用Web服务,该服务将返回用户所需文件的路径。

我想知道在所有阶段将所有这些文件放在同一目录中会对性能产生影响吗?(如果有)



Answers:


12

性能因所使用的文件系统而异。

  • FAT:算了吧:)(好吧,我认为每个目录的限制是512个文件)
  • NTFS:尽管每个文件夹可以容纳40亿个文件,但它的降级速度相对较快-大约一千,您将开始注意到性能问题,几千,您会发现资源管理器似乎挂了很长时间。
  • EXT3:物理限制为32,000个文件,但性能也受数千个文件的影响。

  • EXT4:理论上是无限的

  • ReiserFS,XFS,JFS,BTRFS:这些文件是目录中许多文件的好选择,因为它们更现代并且可以处理许多文件(其他文件是在HDD以MB而非GB计量的年代设计的) 。对于许多文件(以及ext4)来说,性能要好得多,因为它们都使用二进制搜索类型算法来获取所需的文件(其他文件则使用线性度更高的文件)。


6
错了 EXT3中没有32000个文件的限制。子目录上限为32000。我在这里有超过300000个文件的目录,它的性能很好。
davidsheldon

1
确实如此-文件限制是整个文件系统对inode的限制,但您只能使用32k链接(即子目录)。
gbjbaanb 2010年

当前NTFS的声明也不正确,它最多可以容纳4,294,967,295(2 ^
32-1

不要将子目录与文件混淆,在CentOS机器上,我有32000个子目录,达到了限制,我将所有文件移动到了该目录中,但仍然可以正常工作。
adrianTNT


8

我存储供Web服务器使用的图像,并且在EXT3的一个目录中有300,000张图像。我没有看到任何性能问题。在进行此设置之前,我对目录中的500k张图像进行了测试,并按名称随机访问了文件,并且目录中的10万张图像中有500k张以上的图像并没有明显的变慢。

我看到的唯一缺点是,为了与第二个服务器同步新服务器,我必须rsync在整个目录上运行,而不能仅仅告诉它同步包含最近一千个左右的子目录。


好吧,为了与第二台服务器同步,我认为您必须创建一个保留更改的结构和算法,然后此日志可以为您节省大量时间。
Bahadir Tasdemir '16

+1这实际上回答了问题。
kubanczyk

缺点是,如果使用FTP客户端(如FileZilla)并想列出文件夹的内容,则需要花费一些时间。
Kai Noack

3

文件夹中的文件数量理论上可能是无限的。但是,每次操作系统访问特定文件夹以搜索文件时,它都必须处理该文件夹中的所有文件。文件少于500个时,您可能不会注意到任何延迟。但是,当单个文件夹中有成千上万个文件时,简单的文件夹列表命令(ls或dir)可能会花费太长时间。当这些文件夹可以通过FTP访问时,它的速度确实会太慢...

性能问题并不真正取决于您的操作系统,而是取决于系统处理器的速度,磁盘容量和内存。如果有那么多文件,则可能需要将它们组合成一个存档,并使用经过优化的归档系统来保存大量数据。这可能是一个ZIP文件,但更好的是,将它们作为blob存储在数据库中,文件名作为主键。


但是,访问文件是否将直接消除搜索目录的瓶颈,还是访问直接目录仍具有基础搜索调用?(Linux,debian)
史蒂夫

3
直接访问文件将减轻这些问题。我已经在ext3上进行了测试,并且在包含500000个文件的目录中按名称访问文件并不比包含1000个文件的目录慢得多。显然,这样做ls是有问题的。
davidsheldon

当知道确切的名称时,访问应该很快。问题主要是任何想要获取文件列表的代码或命令。
Wim 10 Brink 2010年

1

我的经验法则是,如果文件超过1000个,则拆分文件夹,并且将浏览该文件夹(即通过Internet或资源管理器),否则浏览5000个文件。


0

正如@skaffman所指出的,限制取决于操作系统。您可能会受到旧版操作系统限制的影响。我记得旧版本的Solaris仅限于每个目录32768个文件。

通常的解决方案是使用某种哈希,即Cyrus imap服务器通过字母哈希将用户划分:

/var/spool/imap/a/user/anna/
/var/spool/imap/a/user/albert/
/var/spool/imap/d/user/dan/
/var/spool/imap/e/user/ewan/

1
谢谢,一旦目录中有超过2k个文件,我一定会准备好一些东西!:)
史蒂夫

这个问题有一些很好的答案: serverfault.com/questions/95444/...
戴维

我的一般经验法则是,目录中约有20,000个文件不是一个好主意。大多数现代文件系统都可以处理那么多文件。在目录中找到32k文件后,某些文件系统(例如ext3)将开始出现严重的性能问题。
Phil Hollenback

Phil-关于ext3超过32k文件的性能问题,您是否有任何信息,目前没有超过300k的文件吗?也许这并不影响我的使用方式。
davidsheldon

在我之前的工作中,科学软件会在目录中生成许多小文件(每个文件几千个)。我们肯定已经看到,> 32k文件目录的读取时间将大大增加。仅在具有那么多文件的目录上运行“ ls”将花费一分钟或更长时间。
Phil Hollenback 2010年

0

如果直接访问文件,则目录中的文件数量没有速度问题。

您可以在单个目录中创建的文件数取决于您使用的文件系统。如果要列出目录中的所有文件或进行搜索,排序等操作,那么拥有很多文件将减慢这些操作的速度。

gbjbaanb关于ext3的最大文件大小的回答是错误的。通常,ext通常会限制光盘上的文件数量。您无法创建更多文件,然后inode表中就有inode。他建议使用reiserfs提高许多文件的性能是正确的


0

在NTFS(Windows 7,64位)中已检查10K文件的文件夹。在任何视图(列表,图标等)中具有10K图像的文件夹均可正常工作和滚动,不会出现任何明显的延迟。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.