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

ste*_*eve 22 optimization performance web-services

你好,

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

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

我想知道将所有这些文件放在同一目录中会在哪个阶段看到性能影响?(如有)

gbj*_*anb 16

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

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

  • EXT4:理论上无限

  • ReiserFS、XFS、JFS、BTRFS:这些适用于目录中的大量文件,因为它们更现代并且旨在处理许多文件(其他的设计是在 HDD 以 MB 而非 GB 为单位测量的时代) . 许多文件(以及 ext4)的性能要好得多,因为它们都使用二进制搜索类型算法来获取您想要的文件(其他文件使用更线性的算法)。

  • 这是错误的。EXT3 中没有 32000 个文件的限制。有 32000 个子目录的限制。我这里有一个包含超过 300000 个文件的目录,它运行良好。 (7认同)
  • 确实如此 - 文件限制是整个文件系统对 inode 的限制,但您仅限于 32k 链接(即子目录)。 (2认同)

dav*_*don 10

我存储图像以供 Web 服务器提供服务,并且我在 EXT3 的一个目录中拥有超过 300,000 个图像。我看不到性能问题。在设置之前,我对目录中的 500k 图像进行了测试,并按名称随机访问文件,并且目录中 500k 超过 10k 图像没有显着减速。

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