为什么向包含大量文件的目录添加新文件需要更长的时间?

为什么向包含大量文件的目录添加新文件需要更长的时间?

早在 2011 年,我们就遇到了一个特殊的问题。

我们注意到,我们一位客户的处理工具需要很长时间处理约 20000 个/小时。由于我们每月需要在 3 天的时间内处理超过 300 万个文件,这对我们来说是一个问题。

我们还注意到这不是 CPU 利用率问题,CPU 利用率约为 10%。该工具用于将文件写入以地区短代码命名的文件夹(例如德里的 DEL)。一旦处理作业结束,一个文件夹最终可以容纳 5000 到 200000 个文件。

我们还观察到,当文件写入文件夹时,如果我们将之前写入该文件夹的文件(当 > ~10000 时)删除到子文件夹中,则会大大加快工作速度。

最终,当我们的工具供应商修改了该工具,将文件写入以区号名称(DEL/110012 等)的文件夹中以邮政编码命名的文件夹时,问题得到了解决。现在,每个文件夹最多包含大约 2000 个文件。

编辑1:使用的操作系统是HP-UX。编辑 2:文件大小平均在 25-50 KB 范围内。

那么,为什么向包含大量文件的目录添加新文件需要更长的时间呢?

答案1

如果有很多文件,则在添加新文件时需要搜索/随机播放更多文件。解决这个问题的一种方法是对目录进行分区,即为名称的第一个字符创建子目录(或者类似地,git(1) 使用对象哈希的前两个十六进制数字作为文件名;Fedora 软件包存储库使用第一个字母小写)。

相关内容