目录中有多less个文件太多? (从网上下载数据)

问候,

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

该目录是networking访问。 最终用户调用Web服务,该服务将path返回到用户需要的文件。

我想知道在什么阶段,我将所有这些文件放在同一个目录下,从而使性能受到影响? (如果有的话)

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

  • FAT:忘记它:)(好吧,我觉得每个目录的限制是512个文件)
  • NTFS:虽然每个文件夹可以容纳四十亿个文件,但它会相对较快地降级 – 大约一千年你会注意到性能问题,几千个,你会看到资源pipe理器似乎挂了很长一段时间。
  • EXT3:物理限制是3.2万个文件,但是perf也会在几千个文件之后受损。

  • EXT4: 理论上无限

  • ReiserFS,XFS,JFS,BTRFS:这些对于目录中的大量文件来说是很好的select,因为它们更加现代化,可以处理很多文件(其他的都是在硬盘以MB或GB为单位进行测量的时候devise的) 。 对于许多文件(以及ext4),性能要好得多,因为它们都使用二进制searchtypesalgorithm来获取所需的文件(其他文件使用更为线性的文件)。

我存储的图像服务的Web服务器,我有超过30万的图像在EXT3上的一个目录。 我看不到任何性能问题。 在设置之前,我在一个目录中做了500k个图像的testing,并且通过名称随机地访问文件,并且在目录中的10k图像上没有显着减速。

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

文件夹中的文件数量理论上可以是无限的。 但是,每当操作系统访问特定文件夹来search文件时,都必须处理文件夹中的所有文件。 less于500个文件,你可能不会注意到任何延迟。 但是,如果单个文件夹中有数以万计的文件,则简单的文件夹列表命令(ls或dir)可能会耗费太长时间。 当这些文件夹可以通过FTP访问,它会真的太慢…

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

我的经验法则是如果有超过1000个文件,文件夹将被浏览(即通过互联网或资源pipe理器)或5000文件,否则拆分文件夹。

正如@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/ 

如果您直接访问文件,则目录中的文件数量不存在速度问题。

您可以在单个目录中创build的文件数量取决于您使用的文件系统。 如果列出目录中的所有文件或search,sorting等有许多文件将放慢这些操作。

gbjbaanb在关于ext3的最大文件大小的回答中是错误的。 一般来说,ext限制了光盘上文件的数量。 你不能创build更多的文件,然后你的inode表中有索引节点。 他build议使用reiserfs来获得更多的文件性能

在NTFS中检查10K文件的文件夹(Windows 7,64位)。 在任何视图(列表,图标等)中都有10K图像的文件夹可以正常工作,并且无需任何明显的延迟就可以滚动。