我有一个大小为 500 mb 的大文件,可以在一分钟内以最佳压缩率进行压缩。我发现这些算法适合我的使用。
有人可以比较这些算法之间的速度和压缩比吗?
Yann Collet 的 lz4,放下手。
这个migth可以帮助你:(lz4 vs snappy)http://java-performance.info/performance-general-compression/ (lz4、snappy、lz4hc、blosc的基准)https://web.archive.org/web/20170706065303 /http://blosc.org:80/synthetic-benchmarks.html (现在在http://www.blosc.org/synthetic-benchmarks.html 上不可用)
像大多数问题一样,答案通常最终是:这取决于:)
其他答案为您提供了很好的指导,但要考虑的另一件事是压缩和解压缩阶段的 RAM 使用情况,以及以 MB/s 为单位的解压缩速度。
解压缩速度通常与压缩率成反比,因此您可能认为您选择了完美的算法来节省一些带宽/磁盘存储,但是现在下游消耗该数据的任何东西都必须花费更多时间、CPU 周期和/或 RAM解压。RAM 的使用似乎无关紧要,但下游系统可能是嵌入式/低压系统?也许RAM充足,但CPU有限?所有这些事情都需要考虑在内。
以下是对各种算法进行的一组基准测试的示例,其中考虑了很多这些因素:
如果您只针对高压缩密度,则需要查看 LZMA 和大窗口 Brotli。这两种算法提供了广泛可用的开源算法中最佳的压缩密度。Brotli 在压缩时较慢,但在解压缩时快约 5 倍。