Zip、Rar、7z、Gzip、BZip2、Tar 等。我听说 7z 是本月的热门,为什么?它是适合所有情况还是有针对特定情况的更好选择。
或者实际的文件归档器,即 WinZip、WinRar、7Zip 等(而不是格式)有更大的影响?
在您的回答中,您能否描述一下您所提到的格式使用了什么样的速度/压缩权衡。
请提供支持您答案的任何实证测试的链接。
背景:我需要备份一个自定义搜索索引,该索引创建大约 3000 个相对较小的文件(小于 10MB),每个文件都包含大量重复数据。
(像往常一样,维基百科有一个相关文章但性能比较部分很简短。)
谢谢
答案1
Compress、Gzip、Bzip、Bzip2 不适用于存档多个文件。它们仅压缩单个文件。对于存档,它们通常与 TAR 一起使用。TAR 的问题在于它有没有索引表。只有当你计划恢复所有的事情。如果您预计只需要恢复有限数量的选定文件,请忘记 TAR。要从tar.gz
或tar.bz2
存档中获取最后一个文件,您必须解压缩并处理全部对于 zip、rar 或 7-zip 来说,它会进入索引表,跳到档案的相关位置并仅处理相关文件。
好吧,TAR 出局了,所以剩下 ZIP、RAR 和 7-ZIP。在这三种中,ZIP 是最流行的,几乎所有东西都支持它,许多应用程序都内置了支持。而且它很快。另一方面,7-ZIP 也是可移植的,库是 LGPL,压缩率比其他两个好得多,但代价是更耗 CPU。RAR 在这方面确实很失败,既没有很好的压缩率,也没有真正的可移植性,速度也不快。
编辑:似乎最好的选择是 7-ZIP,但使用 bzip2 压缩方法。这样您就不会遇到 TAR 的缺点,但仍然可以利用 bzip2 多核支持。请参阅此文章。
答案2
推荐阅读:
多核时代的文件压缩(Jeff Atwood 又名 CodingHorror,2009 年 2 月)
我又开始尝试文件压缩了,因为我们每天在 Stack Overflow 上生成一些非常大的备份文件。
我们在数据库服务器上使用最新的 64 位 7zip 版本 (4.64)。我不太喜欢桌面上超过双核的处理器,但对于服务器来说,这是理所当然的。CPU 核心越多越好!这台服务器有两个四核 CPU,总共 8 个核心,而我有点沮丧地发现 RAR 和 7zip 似乎都没有充分利用超过 2 个核心。
尽管如此,即使它只使用 2 个内核进行压缩,7zip 算法也非常有效,而且在过去几年中发展得相当快。我以前推荐 RAR 而不是 Zip,但考虑到 7zip 的效率更高,而且它是免费的而 RAR 不是,现在它成了合乎逻辑的选择。
关于算法:
为什么 bzip2 能够比 7zip 运行得更快? [...] Bzip2 使用 2 个以上的 CPU 核心来并行执行其工作。
答案3
效率和速度并非唯一重要的因素。当然,它们很重要,您可以查看它们的基准,并从选项中做出明智的选择(尽管我建议您在自己的服务器上使用自己的数据进行一些简单的基准测试)。但归档不可避免地会导致在某个时候再次访问您的数据(否则为什么不删除它呢?)。或者也许几年后,您根本不会访问数据,而是第三方访问数据。选择在您需要访问数据时可以使用的东西以及人们可以识别的东西。我个人使用 7zip,但当我存档其他人可能需要的文件时,我会使用 zip。他们知道它,很多工具都可以处理它。它可能不是那么快或那么小,但它有助于人为因素。