我正在编写一个需要存储大约1000万个文件的应用程序。
它们目前以UUID命名,每个大约4MB,但总是相同的大小。从/向这些文件读取和写入将始终是顺序的。
我正在寻找答案的两个主要问题:
1)哪种文件系统最适合这种情况。 XFS还是ext4? 2)是否有必要将文件存储在子目录下以减少单个目录中的文件数量?
对于问题2,我注意到人们试图发现可以存储在单个目录中的文件数量的XFS限制,并且没有找到超过数百万的限制。他们注意到没有性能问题。在ext4下呢?
在人们做类似的事情时,有些人建议将inode编号存储为文件的链接,而不是性能的文件名(这是在数据库索引中。我也在使用)。但是,我没有看到用于按inode编号打开文件的可用API。这似乎更像是在ext3下提高性能的建议,我不打算顺便使用。
ext4和XFS限制是什么?一个在另一个上有什么性能优势,你能看到在我的情况下使用ext4而不是XFS的理由吗?
答案 0 :(得分:19)
您绝对应该将文件存储在子目录中。
EXT4和XFS都使用高效的文件名查找方法,但是如果您需要在ls
或find
这样的目录上运行工具,那么您将非常高兴能够管理这些文件大块1,000 - 10,000个文件。
inode号码用于改善EXT文件系统的顺序访问性能。元数据存储在inode中,如果您不按顺序访问这些inode,则元数据访问将被随机化。通过以inode顺序读取文件,您也可以按顺序访问元数据。
答案 1 :(得分:10)
如果您愿意,现代文件系统将允许您将1000万个文件存储在同一目录中。但工具(ls及其朋友)将无法正常运作。
我建议放一个级别的目录,一个固定的数字,可能是1,000个目录,并将文件放在那里(10,000个文件可以容忍shell,并且“ls”)。
我见过创建多级目录的系统,这确实是不必要的,增加了inode消耗并使遍历变慢。
10M文件也不应该是一个问题,除非你需要对它们进行批量操作。
我希望您需要修剪旧文件,但是像“tmpwatch”这样的东西可能适用于10M文件。