我们有一个使用 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。如果您没有看到任何性能问题,我就不会担心。文件系统不会崩溃,只是您添加的每个文件都会变慢。