目录中的条目过多是否存在问题?

目录中的条目过多是否存在问题?

我们有一个使用 Jira 的系统,Jira 将工单附件存储在 中/opt/jira/jiraattachments。该目录下是项目名称RRT,该目录下是工单目录。因此,工单RRT1234的附件位于:

/opt/jira/jiraattachments/RRT/RRT1234

我们有一个监控系统,当超过 30,000 个项目/opt/jira/jiraattachments/RRT目录中。考虑到我们有 900,000 张 Jira 票,这并不奇怪。

从编程层面来看,我并没有发现什么问题。Jira 不会打开整个目录并保持所有目录都打开。事实上,结构是经过安排的,这样 Jira 就可以立即找到包含附件的目录。

但是,从操作系统层面来看,单个目录包含超过 32K 个文件是否存在问题?我发现编写 shell 脚本并尝试解析这么多文件时会出现问题。我发现ls尝试读取和排序所有这些文件时会出现问题。我知道在 MS-DOS 2.x 时代,目录不能超过 512 个条目。但我们已经不再处于迪斯科时代了。我看不出操作系统会遇到这样的问题。

$ uname -r
2.6.18-238.el5

$ df -kT .
Filesystem    Type   1K-blocks      Used Available Use% Mounted on
10.10.136.125:/vol/jira_prod
               nfs    83886080  58621352  25264728  70% /jira_prod

答案1

我无法完全解释他们的理由,但可以说 ext3 有一个32000 个子目录限制。它可以轻松容纳目录中的 1/4M 文件,具体取决于您的服务器。按方向列出/排序显然成本很高,但即使您知道文件的名称,也没有机制可以避免更高的查找“成本”(索引可以提高性能,但不能解决所有问题)。

正如您所预料的,文件大小越大,性能损失就越严重。大多数建议是每个目录的文件数量不要超过 15-25k。如果您没有看到任何性能问题,我就不会担心。文件系统不会崩溃,只是您添加的每个文件都会变慢。

相关内容