一个目录中有 50,000 个文件,我的最佳选择是什么?

一个目录中有 50,000 个文件,我的最佳选择是什么?

我被迫拥有此目录结构 /var/www/$WEBSITE/$DIR1/$DIR2/$FILES

对于每个 $FILES,都有大约 50,000 个 XHTML 页面。

我正在运行 Cherokee,它具有新的前端缓存支持。但我的内存有限,所以我无法缓存所有内容。我相信我可以只缓存列表,这是最糟糕的部分。

在文件系统方面我能做什么?我通常使用 ext4(我的服务器使用 ext3),但我知道在这种情况下 ReiserFS 是首选。我可能只需将 $WEBSITE 挂载在 ReiserFS 中即可。我真的不希望重新分区,并且很想解决这个问题。

我可以在文件系统的某个地方创建交错子目录,然后将它们全部符号链接到 $DIR2 吗?这是否有助于改善这种糟糕的情况,并减少 ext3 带来的麻烦?

我真的不想要任何 RDB,如果我能以某种方式从中创建一个假文件系统,我会考虑 NOSQL 选项。那将是一个很酷的选项,只是不确定它是否存在。可能存在与 FUSE 相关的东西?

整个网站已经存在,基本上只是一个花哨的目录列表。文件被写入一次,然后从那里开始读取。从现在起,每个目录的文件数量不可能增加。

答案1

50,000 个文件不足以在 Linux 上引起严重的速度问题。您提到缓存列表,所以我认为您正在对文件进行某种处理,而不是简单的服务。我会寻找您如何处理文件的问题。

答案2

我推荐使用 XFS,但有一个可能的例外:如果你经常需要从目录树中删除大量文件,XFS 的删除性能并不出色。新的延迟日志但是,mount 参数。

除此之外,XFS 甚至不会对目录中的 50 000 个文件做出反应。

答案3

您可以尝试 XFS。我在 XFS 文件系统上运行大型目录,效果很好。lsdu并且其他文件操作明显比 ext3 更好。无论哪种方式,为了可扩展性,开发更清晰的目录结构可能是有意义的。

[root@bootylicious /data/print]# ls -1 | wc -l
431801

答案4

我找到了解决问题的方法

我的 FS 性能在仅约 5000 个文件时就让我感到不舒服,这就是我发布此问题的原因。我通常会使用 Ext4,并且使用过 XFS;它一直表现稳定;但我已经在 Ext3 上安装了所有内容。

Ext4 默认启用 Htree 索引,因此这不是问题。Ext3 支持 Htree 索引 dir_index;但是,我的 FS 上未启用该索引。

# I Checked Ext features, no dir_index
$ tune2fs -l /dev/xvda | grep features

# Enabled dir_index
$ tune2fs -O dir_index /dev/xvda

我确实需要在重启后进行 fsck,但除此之外,它已成功启用。当我列出这些目录中的文件时,性能问题就消失了。我可以避免实现基于 NoSQL 的 VFS、gridfs-fuse;我可以避免对我已分配的硬盘进行调整大小/重新分区。

至于更改我的 FS,如果可能的话,我想避免那种磁盘操作。

相关内容