我有一个单一的文件夹(Linux服务器)超过20万图像的PHP / MySQL网站。 我不认为,我永远不需要在文件浏览器中看到他们,而是在他们的个人网页上查看网站。 他们只是显示在网站上的产品页面。 文件系统是ext3 。 所以将它们保存在单个文件夹中是明智的吗? 它可以减缓网站的性能?
Ext3使用树来保存目录内容,所以在一个目录中处理大量文件的能力要好于那些带有线性目录列表的文件系统。 在这里你可以阅读用于保存目录内容的树的描述 。
但是,200K文件仍然是一个巨大的数字。 根据文件名的前n个字符将它们移动到子目录是合理的。 这种方法可以让你只保存文件名而不保存目录名,当你需要访问文件时,你知道在哪里(在哪个子目录中)查找它。
这似乎已经在下面的链接回答。
https://serverfault.com/questions/43133/filesystem-large-number-of-files-in-a-single-directory
我知道选择了一个答案,我想增加一个解决方案,提高性能,兴趣
每次查询目录列表将花费最多的开销,如果目录列表每次都返回所有结果。
您可以通过将列表存储在索引数据库(比如SQLite)中来查询结果,从而提高性能。 您可以选择一部分记录并以这种方式更简单地实现分页,并过滤结果。
文件系统确定性能,并且没有索引的20万图像将会减慢ext2(或NTFS)的性能,
很可能在将来的某个时候,你可能想要做一些将所有图像倾倒在一个文件夹中的东西会伤害到你,或者会发生意想不到的事情,你会后悔这样做。
另一方面,将文件分成几个文件夹似乎没有很多缺点,除了处理它们增加了复杂性。
性能将取决于您的文件系统,配置和访问模式。 我相信,如果在多个文件夹之间分割文件,性能会明显变差,那将会非常奇怪。
所以我会说,分裂成不同的文件夹…
本文针对web场景的ext2变体可能会让您感兴趣: hashFS:应用哈希来优化小文件读取的文件系统 。
我们已经看到,对于web场景(假设在论文中提到),使用平面文件集(目录中的更多文件)比深层文件集(更深的目录树)更好的ext2性能。
当然,回顾一下,评估应该是更广泛的。 但可能值得一读。