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

With which data format can I distribute a big number of small files?

我即将发布机器学习数据集。该数据集包含大约 170,000 个文件(32px x 32px 的 png 图像)。我首先想通过 zip 存档 (57.2MB) 共享它们。但是,提取这些文件需要很长时间(超过 15 分钟 - 我不确定我是什么时候开始的)。

是否有更好的格式来共享这些文件?

尝试 .tar.xz - 比 .tar.gz

更好的压缩率但提取速度稍慢

我刚刚做了一些基准测试:

实验/基准

我使用 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.gz(只是为了去掉文件之间的 tar 零)。 png 文件已经被压缩,因此没有必要进一步压缩它们。 (尽管在将每个 png 文件放入发行版之前,您可以使用各种工具尝试最小化它们的大小。)