我可以使用哪种数据格式分发大量小文件?
Posted
技术标签:
【中文标题】我可以使用哪种数据格式分发大量小文件?【英文标题】:With which data format can I distribute a big number of small files? 【发布时间】:2017-01-17 06:55:44 【问题描述】:我即将发布一个机器学习数据集。该数据集包含大约 170,000 个文件(32px x 32px 的 png 图像)。我首先想通过一个 zip 存档 (57.2MB) 来分享它们。但是,提取这些文件需要很长时间(超过 15 分钟 - 我不确定我什么时候开始的)。
有没有更好的格式来共享这些文件?
【问题讨论】:
【参考方案1】:试试 .tar.xz - 比 .tar.gz 压缩比更好,但提取速度稍慢
【讨论】:
【参考方案2】:我刚刚做了一些基准测试:
实验/基准
我使用dtrx
提取以下内容并使用time dtrx filename
获取时间。
Format File size Time to extract
.7z 27.7 MB > 1h
.tar.bz2 29.1 MB 7.18s
.tar.lzma 29.3 MB 6.43s
.xz 29.3 MB 6.56s
.tar.gz 33.3 MB 6.56s
.zip 57.2 MB > 30min
.jar 70.8 MB 5.64s
.tar 177.9 MB 5.40s
有趣。提取的内容为 47 MB 大。为什么.tar
是其内容大小的 3 倍以上?
无论如何。我认为tar.bz2
可能是一个不错的选择。
【讨论】:
tar 文件使用 512 字节的块作为条目,因此如果文件小于 512 字节,它仍将占用该数量,其余部分用零填充。此外,每个文件前面都有一个 512 字节的文件元数据块。因此,如果每个文件大约 340 字节,那么 tar 文件将是原始文件大小的三倍。 (请注意,驱动器也使用块,因此文件可能会占用驱动器上的更多空间。)【参考方案3】:只需在最低压缩级别使用 tar.gz(只是为了摆脱文件之间的 tar 零)。 png 文件已经被压缩,因此尝试进一步压缩它们是没有意义的。 (尽管您可以使用各种工具来尝试在将每个 png 文件放入分发之前最小化它们的大小。)
【讨论】:
以上是关于我可以使用哪种数据格式分发大量小文件?的主要内容,如果未能解决你的问题,请参考以下文章