我很好奇,从性能的角度来看,将所有文件存储在一个目录中是否比将每个文件放在单独的目录中更有优势?我不关心组织。
此外,这是假设文件会被经常访问——因此 I/O 使用率会很高。不涉及目录列表,文件将通过绝对路径提取。
系统环境为Linux,CentOS 5.3。
答案1
路径解析与目录中的文件数量成正比(尽管不是线性的)。即使解析绝对路径也是如此,因为文件系统仍然需要扫描每个目录块中的文件名来解析路径。不同的文件系统具有不同的解析特性,但一般来说,您会在 10,000 个文件左右开始注意到性能下降。
答案2
除非目录位于不同的磁盘或 RAID 上,否则无论它们是否都在一个目录中,您都不会看到明显的区别。每个磁盘的 I/O 操作都放在一个队列中。如果它们位于不同的 RAID 上,那么您将看到您所寻找的明显优势。
答案3
如果您有足够的内存来保存所有文件,您是否考虑过将它们缓存在 RAM 中? http://www.linuxmaza.com/system-administration/how-to-mount-ramfs-tmpfs-in-linux/
答案4
ext3 做了一些好事:
http://www.ibm.com/developerworks/linux/library/l-fs8.html
请参阅章节标题:日志选项和写入延迟
,这允许您为应用程序“调整”ext3。