[英]Storing & accessing up to 10 million files in Linux
我正在编写一个需要存储大约1000万个文件的应用程序。
它们目前以UUID命名,每个大约4MB,但总是相同。 从/向这些文件读取和写入将始终是顺序的。
我正在寻找2个主要问题的答案:
1)哪种文件系统最适合这种情况。 XFS还是ext4? 2)是否有必要将文件存储在子目录下以减少单个目录中的文件数量?
对于问题2,我注意到人们已经尝试发现可以存储在单个目录中的文件数量的XFS限制,并且没有找到超过数百万的限制。 他们注意到没有性能问题。 在ext4下怎么样?
在人们做类似事情时,有些人建议将inode编号存储为文件的链接而不是文件的性能(这是在数据库索引中。我也在使用)。 但是,我没有看到用于按inode编号打开文件的可用API。 这似乎更像是在ext3下提高性能的建议,我不打算顺便使用它。
ext4和XFS限制是什么? 从一个到另一个有什么性能优势,你能看到在我的情况下使用ext4而不是XFS的理由吗?
您绝对应该将文件存储在子目录中。
EXT4和XFS都使用高效的文件名查找方法,但是如果您需要在ls
等目录上运行工具或者find
您将很高兴将文件保存在1,000到10,000个文件的可管理块中。
inode号是为了提高EXT文件系统的顺序访问性能。 元数据存储在inode中,如果您不按顺序访问这些inode,则元数据访问将被随机化。 通过以inode顺序读取文件,您也可以按顺序访问元数据。
如果您愿意,现代文件系统将允许您将1000万个文件存储在同一目录中。 但工具(ls及其朋友)将无法正常工作。
我建议放一个级别的目录,一个固定的数字,可能是1000个目录,并将文件放在那里(10,000个文件可以容忍shell,“ls”)。
我已经看到了创建多级目录的系统,这确实是不必要的,增加了inode消耗并使遍历变慢。
10M文件也不应该是一个问题,除非你需要对它们进行批量操作。
我希望你需要修剪旧文件,但像“tmpwatch”这样的东西可能适用于10M文件。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.