31

我正在编写一个需要存储大量文件的应用程序,最多大约 1000 万个。

它们目前以 UUID 命名,每个大小约为 4MB,但大小始终相同。从/向这些文件读取和写入将始终是顺序的。

我正在寻求答案的 2 个主要问题:

1)哪个文件系统最适合这个。XFS 还是 ext4?2)是否有必要将文件存储在子目录下以减少单个目录中的文件数量?

对于问题 2,我注意到人们试图发现 XFS 对您可以存储在单个目录中的文件数量的限制,但没有找到超过数百万的限制。他们注意到没有性能问题。ext4下呢?

与做类似事情的人一起谷歌搜索,有些人建议将 inode 编号存储为文件的链接而不是文件名以提高性能(这是在数据库索引中。我也在使用)。但是,我没有看到通过 inode 编号打开文件的可用 API。这似乎更像是在 ext3 下提高性能的建议,我不打算顺便使用它。

ext4 和 XFS 的限制是什么?一个比另一个有什么性能优势,在我的例子中,你能看到在 XFS 上使用 ext4 的理由吗?

4

2 回答 2

21

您绝对应该将文件存储在子目录中。

EXT4 和 XFS 都使用有效的文件名查找方法,但是如果您需要在目录上运行工具,例如,lsfind会很高兴将文件放在 1,000 - 10,000 个文件的可管理块中。

inode 号是为了提高 EXT 文件系统的顺序访问性能。元数据存储在 inode 中,如果您无序访问这些 inode,则元数据访问是随机的。通过按 inode 顺序读取文件,您也可以按顺序访问元数据。

于 2011-02-16T18:35:57.830 回答
11

如果您愿意,现代文件系统将允许您将 1000 万个文件全部存储在同一目录中。但是工具(ls 和它的朋友)不能很好地工作。

我建议放置一个级别的目录,一个固定的数量,也许是 1,000 个目录,然后将文件放在那里(shell 可以容忍 10,000 个文件和“ls”)。

我见过创建许多级别目录的系统,这确实是不必要的,并且会增加 inode 消耗并使遍历速度变慢。

10M 文件也应该不是问题,除非您需要对它们进行批量操作。

我希望您需要修剪旧文件,但是像“tmpwatch”之类的东西可能适用于 10M 文件。

于 2011-02-16T23:17:05.010 回答