我在一个文件夹(linux服务器)中有一个超过 200,000 图像的php / mysql网站。我不认为,我永远不需要在文件浏览器中看到它们,而是在网站上查看它们各自的页面。它们只显示在网站的产品页面中。 文件系统为ext3 。将它们保存在单个文件夹中是否明智?它会降低网站的性能吗?
答案 0 :(得分:13)
Ext3使用树来保存目录内容,因此它在单个目录中处理大量文件的能力要优于具有线性目录列表的文件系统。 在这里,您可以阅读用于保存目录内容的the description of the tree。
然而,200K文件仍然是一个巨大的数字。根据文件名的前n个字符将它们移动到子目录中是合理的。此方法允许您仅保留文件名而不保留目录名,当您需要访问该文件时,您知道要查找的位置(在哪个子目录中)。
答案 1 :(得分:5)
这似乎已在以下链接中得到解答。
https://serverfault.com/questions/43133/filesystem-large-number-of-files-in-a-single-directory
答案 2 :(得分:1)
我知道答案被选中了,我想添加一个改善绩效的解决方案,感兴趣
如果目录列表每次都返回所有结果,则每次查询目录列表将花费最多的开销。
您可以通过将列表存储在索引数据库(例如SQLite)中来提高性能,并从中查询结果。您可以通过这种方式更轻松地选择记录子集并实现分页,并过滤结果。
答案 3 :(得分:0)
文件系统决定性能,没有索引的200,000张图像会降低ext2(或NTFS)中的性能
答案 4 :(得分:0)
很有可能在未来的某个时候你可能想要做一些事情,将所有图像转储到一个文件夹中会对你造成伤害,或者会发生意想不到的事情,你会后悔这样做。
另一方面,将文件拆分成几个文件夹似乎没有很多缺点,除了增加处理它们的复杂性。
性能取决于您的文件系统,配置和访问模式。我相信如果在多个文件夹之间拆分文件,性能会明显变差,这将是非常奇怪的。
所以我会说,分成不同的文件夹...
答案 5 :(得分:0)
本文针对网络方案的ext2变体可能会让您感兴趣:hashFS: Applying Hashing to Optimize File Systems for Small File Reads。
我们已经看到一个更好的ext2性能,平面文件集(目录中的文件更多),而不是深层文件集(更深的目录树),用于Web场景(文章中所述的假设)。
当然,回想起来,评估应该更广泛。但它可能值得一读。