![适用于数百万小文件的文件系统](https://linux22.com/image/482063/%E9%80%82%E7%94%A8%E4%BA%8E%E6%95%B0%E7%99%BE%E4%B8%87%E5%B0%8F%E6%96%87%E4%BB%B6%E7%9A%84%E6%96%87%E4%BB%B6%E7%B3%BB%E7%BB%9F.png)
您会选择哪种 Linux 文件系统最佳速度在以下情况下:
- 一亿个文件
- 平均文件大小约为 2k
- >95% 的读取访问率
- 相当随机访问
- 高并发(>100 个进程)
笔记:文件存储在深层次树中以避免目录过大。每个叶目录包含大约一千个文件。
您将如何对其进行基准测试?
答案1
在随机查找方面,Reiser 胜出,其次是 EXT4,然后是 JFS。我不确定这是否与目录查找完全相关,但似乎是一个指标。您必须为此进行自己的测试。EXT2 在文件创建时间方面胜过所有文件系统,可能是因为它没有日志,但 EXT4 仍然胜过除 Reiser 之外的所有文件系统,由于 hans reiser 的当前状态,您可能不想使用 Reiser。
您可能需要查看支持 NCQ 的驱动器,并确保您的安装已设置为使用它。在重度寻道下,它应该会提高速度。
最后,确保您的机器有大量的 RAM。由于文件不经常更新,如果有可用空间,Linux 最终会将大部分文件缓存到 RAM 中。如果您的使用模式正确,这将大大提高您的速度。
答案2
答案3
我知道这不是对你问题的直接回答,但在这些情况下,我认为数据库可能更适合托管它。小文件可以以二进制格式存储在数据库表中并随时检索。使用这些文件的软件应该能够支持这一点……
答案4
根据我的经验,对于小文件,ext2 比 ext4 好很多。如果您不关心写入完整性,ext2 就很棒。例如,Subversion 创建了大量小文件,ext4 和其他文件系统 (XFS) 会因此而阻塞(运行一个 cron 作业,每半小时左右将数据从 ext2 rsync 到 ext4 几乎可以解决这个问题。)
运行这些命令可使 ext2 运行得更快(尽管大多数这些选项在崩溃后会使文件系统不稳定,除非您在崩溃前运行 sync)。这些命令对处理小文件的 ext4 几乎没有影响。
echo 15 > /proc/sys/vm/swappiness
echo 10 > /proc/sys/vm/vfs_cache_pressure
echo 99 > /proc/sys/vm/dirty_ratio
echo 50 > /proc/sys/vm/dirty_background_ratio
echo 360000 > /proc/sys/vm/dirty_expire_centisecs
echo 360000 > /proc/sys/vm/dirty_writeback_centisecs
echo "2000" > /proc/sys/vm/vfs_cache_pressure