我有一个由 2 个十六进制数字定义的 3 级目录结构:
0A/FF/2B/someimagefile.gif
我在将填充这些目录的 1.5TB 压缩文件中有 300M 小文件(我们将来会有更多文件,所以我选择目录结构以防止大量文件使典型的 extX 文件系统崩溃)。
解压这些文件以每秒 1MB 的速度移动(或解压约 18 天)。哎哟!
我猜它很慢,因为我正在创建目录结构,然后是文件(通过 Java API 完成)。所以我开始在 bash 循环中单独创建目录结构。
以目前的速度,光是目录就大约需要 5 天的任务。
关于提高移动速度的任何想法?
更新
难题的一部分已经解决,使用 perl 而不是 bash,创建目录的速度提高了 200 多倍,现在这是一个让您喝杯咖啡休息的操作,而不是延长周末的假期。
但是创建文件仍然非常慢,甚至不需要创建目录。
我对此的最终回答是:“不要这样做”。
在创建许多小文件时,我找不到将速度提高到大约 2Mbytes/sec 以上的方法。对于 TB 数据量来说,这是无法克服的惯性。
我们跟随 facebook 的脚步,将文件转储到二进制数据存储(或使用带有 BLOB 的大量 mysql/myisam 表,现在进行试验......)。
它有点复杂,但消除了与小文件相关的随机查找问题,而且我可以在几小时或一天内处理 TB 级数据,而不是几周。
MongoDB 是另一个值得研究的好选择。
使用 noatime、nodiratime 选项重新挂载文件系统