在一个目录中保存多少文件有关系吗?如果是,一个目录中有多少文件是太多的,拥有太多文件的影响是什么?(这是在Linux服务器上。)

Background: I have a photo album website, and every image uploaded is renamed to an 8-hex-digit id (say, a58f375c.jpg). This is to avoid filename conflicts (if lots of "IMG0001.JPG" files are uploaded, for example). The original filename and any useful metadata is stored in a database. Right now, I have somewhere around 1500 files in the images directory. This makes listing the files in the directory (through FTP or SSH client) take a few seconds. But I can't see that it has any effect other than that. In particular, there doesn't seem to be any impact on how quickly an image file is served to the user.

我想过通过创建16个子目录来减少图像的数量:0-9和a-f。然后我将根据文件名的第一个十六进制数字将图像移动到子目录中。但是除了偶尔通过FTP/SSH列出目录之外,我不确定这样做是否有任何理由。


当前回答

问题归结为你将如何处理这些文件。

在Windows下,对于我来说,在资源管理器中打开任何超过2k个文件的目录都比较缓慢。如果它们都是图像文件,在缩略图视图中,超过1k的文件往往打开得非常慢。

系统规定的上限曾一度是32767个。现在它更高了,但即使如此,在大多数情况下,一次处理的文件也太多了。

其他回答

我现在正在研究一个类似的问题。我们有一个层次结构的目录结构,并使用映像id作为文件名。例如,其中放置了id=1234567的图像

..../45/67/1234567_<...>.jpg

使用最后4位数字来确定文件的位置。

对于几千张图像,您可以使用一级层次结构。出于效率/备份/其他考虑,系统管理员建议在任何给定目录(ext3)中不超过几千个文件。

我遇到的最大问题是在32位系统上。一旦你通过了一个特定的数字,像'ls'这样的工具就会停止工作。

一旦您通过了这个障碍,试图对该目录做任何事情都将成为一个巨大的问题。

问题归结为你将如何处理这些文件。

在Windows下,对于我来说,在资源管理器中打开任何超过2k个文件的目录都比较缓慢。如果它们都是图像文件,在缩略图视图中,超过1k的文件往往打开得非常慢。

系统规定的上限曾一度是32767个。现在它更高了,但即使如此,在大多数情况下,一次处理的文件也太多了。

FAT32:

最大文件数:268,173,300 每个目录的最大文件数:216 - 1 (65,535) 最大文件大小:2 GiB - 1无LFS, 4 GiB - 1有

NTFS:

最大文件数:232 - 1 (4,294,967,295) 最大文件大小 实现:244 - 26字节(16 TiB - 64 KiB) 理论:264 - 26字节(16 EiB - 64 KiB) 最大卷大小 实现:232 - 1个集群(256tib - 64kib) 理论:264 - 1个集群(1 YiB - 64 KiB)

ext2:

最大文件数:1018 每个目录的最大文件数:~1.3 × 1020(性能问题超过10,000) 最大文件大小 16gib(每块大小为1kib) 256gib(区块大小为2kib) 2 TiB(区块大小4 KiB) 2 TiB(块大小为8 KiB) 最大卷大小 4 TiB(区块大小为1kib) 8 TiB(区块大小为2 KiB) 16 TiB(区块大小为4 KiB) 32 TiB(块大小为8 KiB)

ext3:

最大文件数:min(volumeSize / 213, numberOfBlocks) 最大文件大小:与ext2相同 最大卷大小:与ext2相同

ext4:

最大文件数:232 - 1 (4,294,967,295) 每个目录的最大文件数:无限制 最大文件大小:244 - 1字节(16tib - 1) 最大卷大小:248 - 1字节(256tib - 1)

这实际上取决于所使用的文件系统,以及一些标志。

例如,ext3可以有数千个文件;但在几千次之后,它就变得非常缓慢了。主要是在列出目录时,但也在打开单个文件时。几年前,它获得了“htree”选项,这极大地缩短了给定文件名获取inode所需的时间。

就我个人而言,我使用子目录将大多数级别保持在1000个左右的项目以下。在您的例子中,我将创建256个目录,使用ID的最后两个十六进制数字。使用最后一个数字,而不是第一个数字,这样可以实现负载平衡。