有效处理200多万个文件

有效处理200多万个文件

我有一个基于文件的数据库,其中有大约 2M 个文件存储在 3 级子目录中。

2/2/6253
2/2/6252
...

文件大小从 30 字节到 60 KB 不等。整个数据库是只读的。数据库大约有 125 GB。

添加:所有文件均由zlib(python)压缩

我想将其作为一个文件处理,其中包含文件系统。哪个文件系统是我的最佳选择?

目前我使用以下脚本:

dd if=/dev/zero of=/my_file.iso bs=1024K count=60000
mkfs.ext4 -f /my_file.iso
mount -o loop /my_file.iso /mnt/

答案1

您可能只想使用 XFS。

它完全能够满足您的要求并完成工作。

没有理由用较少使用的文件系统来使这个问题复杂化,因为这可能会带来其他的权衡。

请参见:子目录的数量如何影响 Linux 上的驱动器读/写性能?高目录与文件比率对 XFS 的影响

如果你想要一些更深奥的东西,带有文件系统的 ZFS zvols 可以提供一个有趣的替代方案(为了压缩、完整性和可移植性的目的)。

看这里:与 ext4 结合的透明压缩文件系统

答案2

看到小文件的数量,我会考虑使用 SquashFS。特别是如果你有足够强大的 CPU(意味着没有 Pentium III 或 1GHz ARM)。

根据存储的数据类型,SquashFS 可以大大减少其大小,从而减少读取时的 I/O。唯一的缺点是读取时的 CPU 使用率。另一方面,任何现代 CPU 都可以以远超 HDD 甚至 SSD 的速度进行解压缩。

另一个优点是 - 您可以节省空间/带宽和/或传输后解压缩所花费的时间。

一些基准测试与 ISO 和其他类似方法进行比较。与每个基准测试一样,请谨慎对待,最好伪造自己的基准。;-)

编辑:根据具体情况(我不敢在这里猜测),未压缩的 SquashFS(mksquashfs -noD)可能优于 ext4,因为读取代码应该更简单,并且针对只读操作进行了优化。但这实际上取决于您在使用案例中进行基准测试。另一个优点是 SquashFS 映像比您的数据略大。使用 Ext4,您必须始终创建更大的循环设备。缺点当然是,当您需要更改数据时,它会相当不舒服。使用 ext4 更容易。

答案3

如果是只读的,为什么不使用 ISO 文件?您可以使用genisoimagemkisofs

如果您想要压缩整个文件,您也可以使用squashfs,另一个具有非常高压缩率的只读文件系统。

答案4

我不确定这是否符合您的目的,但您是否考虑过tar合并多个文件?这可能会减少文件系统的压力和空间要求,并且您的数据库应用程序可以使用众多tar库之一读取特定文件的数据。

根据您的访问模式,这甚至可能会提高性能。

相关内容