拥有大量文件显然会降低操作系统的速度;但这个问题有多严重?假设文件已均匀分布在多级文件夹中。文件数量(可能是因为使用 inode)是否仍会降低系统速度?
我说的是几百万!对于台式电脑来说,由于程序不同,这并不算太多;但对于网络服务器来说,这太多了。
我很好奇,存储数百万个文件(在适当的文件夹中)是否会对服务器性能产生显著影响?
更多信息:考虑使用 ext4 作为文件系统,并且两级文件夹中每个文件夹有 100 个文件。
答案1
Having numerous files will obviously slow down the OS
不会,确实不会。我的 *NIX 系统的 inode 利用率达到 99%(“接近文件系统可容纳文件数量的上限”),并且没有出现任何性能问题。
我的工作站目前的 inode 利用率为 90%,所有性能问题都是由于 RAM 不足造成的。
but how much this problem is serious? Consider that the files have been well distributed over multi-level folders. Does still the number of files (probably because of using inodes) can slow down the system?
这不是一个严重的问题。如果架构合理,您应该能够达到系统的 inode 限制而不会出现任何性能问题。
另请注意,*NIX 系统上的每个目录(“文件夹”)都使用一个 inode。
I am talking about few millions! This is not too much for a Desktop computer, due to different programs; but this is too much for web servers.
您根据什么得出这个(大部分都是错误的)结论?假设它们运行的是相同的操作系统,为什么您的桌面和服务器在文件系统行为方面会神奇地不同?
“不同的程序”对文件系统性能没有影响。操作系统负责告诉您哪些文件位于何处(逻辑上位于文件系统内,物理上位于磁盘上),大多数文件系统在这方面都非常高效。
I am curious to know whether storing few millions of files (in appropriate folder) has a significant effect on the server performance?
一个目录中有数百万个文件?不建议这样做(在许多系统上也是不可能的——通常对目录中的最大文件数有限制)。
遍历非常大的目录树可能会导致性能问题(操作系统需要花时间遍历树并列出所有子项,然后您的软件必须处理它所处理的大量数据),但如果您没有非常不合理的目录结构(例如“所有内容/dumping_ground
”),这应该不是问题。
回应上述编辑:
More Information: Consider ext4 as filesystem, and 100 files per folder in two-level folders.
你在开玩笑吧?考虑一下文件的数量/usr/bin
:
# ls -a /usr/bin | wc -l
448
这就是小的为了/usr/bin
。
答案2
文件数量不会对性能产生任何重大影响。如果工作集的总大小超过服务器的 RAM 量,则会影响性能,但如果是一个巨大的文件或一百万个小文件,情况也会一样。
对于某些文件系统,单个目录中包含大量文件或目录结构过深会影响性能。但可以通过选择不存在此问题的文件系统或通过安排目录结构来避免这种情况。