我可以使用哪种数据格式分发大量小文件?

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 文件放入分发之前最小化它们的大小。)

【讨论】:

以上是关于我可以使用哪种数据格式分发大量小文件?的主要内容,如果未能解决你的问题,请参考以下文章

HDFS:如何分发小文件?

使用哪种声音格式? iOS 通知

ply格式文件,用C语言怎么读入,并存储在哪种数据结构中

我应该为 HTML 嵌入选择哪种音频格式和哪种压缩方式?

我可以使用 Libre Office 的哪种输出格式来跟踪我的文件历史记录?

在 XCode 中添加声音时应该使用哪种格式?