我在Linux平台上开发了一些PHP项目。将数千个图像(文件)放在一个目录中是否有任何缺点?这是封闭的,不会增长。另一种方法是使用基于某些ID的目录结构来分离这些文件(这样一来,在一个目录中只有100个)。
我问这个问题,因为当我查看不同网站上的图片网址时,我常常看到这种分离。您可以看到以这种方式完成目录分离,即一个目录中不会有数百个图像。
如果不将几千个文件(不增长的集合)放在一个目录中,而是将它们分成几组,例如将它们分开,我将获得什么? 100?是值得复杂的事情吗?
更新
来自答案的有价值的信息:
为什么要将许多文件分隔到不同的目录:
答案 0 :(得分:7)
除了通过将图像分成子目录来加快文件访问速度之外,您还可以在达到文件系统的自然限制之前大幅扩展可以跟踪的文件数。
一种简单的方法是md5()
文件名,然后使用第一个 n 字符作为目录名称(例如,substr(md5($filename), 2)
)。这确保了合理均匀的分布(与直接文件名的第一个 n 字符相比)。
答案 1 :(得分:2)
通常这种拆分的原因是文件系统性能。 对于一组封闭的5000个文件,我不确定这是值得的麻烦。 我建议您尝试将所有文件放在一个目录中的简单方法,但要密切关注访问文件所需的实际时间。
如果您发现它的速度不够快,可以按照您的建议进行拆分。
出于性能原因,我不得不自行拆分文件。 另外,当在nfs上使用ext3时,我在每个目录中遇到了32k文件限制(不确定它是否是nfs或ext3的限制)。 这是拆分成多个目录的另一个原因。 在任何情况下,尝试使用单个目录,只有在看到它不够快时才会拆分。
答案 2 :(得分:1)
我认为这个问题有两个方面:
您正在使用的Linux文件系统是否有效支持包含数千个文件的目录。我不是专家,但我认为较新的文件系统不会有问题。
特定PHP函数是否存在性能问题?我认为直接访问文件应该没问题,但是如果你正在进行目录列表,那么最终可能会遇到时间或内存问题。
答案 3 :(得分:1)
没有理由将这些文件拆分成多个目录,如果您不希望任何文件名冲突,并且您不需要在任何时候迭代这些图像。
但是,如果你能想到一个暗示性的分类,那么对图像进行一些排序并不是一个坏主意,即使只是出于维护原因。
答案 4 :(得分:0)
我可以想象它在哪里有害的唯一原因是迭代目录。更多文件,意味着更多迭代。但从编程的角度来看,这基本上是我所能想到的。
答案 5 :(得分:0)
数千张图片仍然可以。当您访问目录时,操作系统会按4K块读取其文件列表。如果您有普通的目录结构,如果其中有许多(例如十万)文件,则可能需要一些时间来阅读整个文件列表。
答案 6 :(得分:0)
如果更改文件系统是一个选项,我建议您将所有图像存储到ReiserFS文件系统的任何位置移动。它非常适合快速存储/访问大量小文件。
如果没有,MightyE将其分解为文件夹的反应是最符合逻辑的,并且会大大增加访问时间。