我想管理服务器上的大量文件(比如数百万个)。需要将文件保存在两到三级文件夹中,以保持每个文件夹中的文件数量较少。另一方面,文件夹过多会浪费 inode,这也不是什么好事。
每个文件夹的最佳文件比例是多少?是否有理论方法可以确定这一点,还是取决于服务器规格?
答案1
服务器规格可能不是问题,而您使用的文件系统才是问题。不同的文件系统存储目录数据的方法不同。这将影响不同大小的扫描速度。
另一个重要的考虑因素是文件的生命周期。如果您经常添加和删除文件,您可能希望叶目录比它们本来应该的要小。
您可能希望查看 Apache Web 服务器和 Squid 代理使用的缓存目录结构。这些缓存经过了充分测试,能够处理相对较高的变化率,并且可扩展性好。
编辑:您的问题的答案很大程度上取决于文件的生命周期和访问模式。这些因素将显著影响磁盘 I/O 和缓冲内存要求。文件数量可能是一个不太重要的因素。
除了文件系统的选择,内存、磁盘接口、磁盘数量和 RAID 设置都会影响磁盘访问性能。性能需要满足要求并有一定的余地。
随着写入和删除次数的增加,磁盘设置往往变得更加重要。随着文件访问变得更加随机,磁盘设置也变得越来越重要。这些因素往往会增加对磁盘吞吐量的要求。
增加内存通常会使文件从磁盘缓冲区而不是磁盘访问的可能性更大。这将提高大多数系统的文件访问性能。访问许多大文件可能会导致磁盘缓存性能下降。
对于我使用过的大多数系统,文件被访问的可能性与上次访问的时间有关。文件被访问的时间越近,再次被访问的可能性就越大。在这些情况下,散列算法往往在优化检索方面很重要。如果文件访问确实是随机的,那么这一点就不那么重要了。
删除文件所需的磁盘 I/O 可能比添加文件高得多。许多系统在从大型目录中删除大量文件时会遇到严重问题。文件添加和删除的频率越高,这个问题就越严重。在考虑这些因素时,文件生命周期是一个重要因素。
备份是另一个问题,可能需要安排备份时间,以免引起磁盘缓冲问题。较新的系统允许优化 IO,因此备份和其他维护程序对应用程序的影响较小。