Zstandard
Zstandard(或Zstd)是由Facebook的Yann Collet开发的一个无损数据压缩算法。该名称也指其C语言的参考实现。第1版的实现于2016年8月31日发布为自由软件[2][3][4]
原作者 | Yann Collet |
---|---|
開發者 | Yann Collet、Przemysław Skibiński(inikep) |
初始版本 | 2015年1月24日 |
穩定版本 | 1.4.1 (2019年7月19日[1]) |
源代码库 | |
编程语言 | C |
操作系统 | 跨平台 |
系統平台 | 可移植 |
类型 | 数据压缩 |
许可协议 | BSD许可证 |
网站 | facebook |
特色
设计Zstandard的目的是提供一个类似于DEFLATE算法的压缩比,但更快,特别是解压缩快的算法。它的压缩级别从负5级(最快)到22级(压缩速度最慢,但是压缩比最高)可以调节。[5]
zstd包里面有压缩和解压缩的并行(多线程)实现。从1.3.2版本(2017年10月)开始,zstd 有选择地实现非常长的搜索和重复数据消除(--long
,128MiB窗口),类似于rzip或lrzip。[6]
压缩速度在最快和最慢级别之间可以相差20倍或更多,而解压缩速度统统很快,在最快和最慢级别之间相差不到20%。[7] Zstandard命令行有一个“自适应”(--adapt
)模式,根据I/O条件改变压缩级别,主要是写入输出的速度。
Zstd在其最大压缩级别下的压缩比接近lzma、lzham和ppmx,并且比lza或bzip2性能更好。[8][9] Zstandard达到了当前的Pareto边界,因为它解压缩的速度比任何其他当前可用的算法都要快,并且有类似的或者更好的压缩比。[10][11]
字典对小文件的压缩比有很大的影响,所以Zstandard可以使用用户提供的压缩字典。它还提供了一种训练模式,能够从一组样本生成一个字典。[12][13] 特别是,可以加载一个字典来处理文件之间具有冗余的大型文件集,但不一定在每个文件(例如日志文件)内。
使用情况
.zst | |
application/zstd[14] | |
格式类型 | 数据压缩 |
Linux内核自2017年11月以来就包含了Zstandard (4.14版本) ,作为btrfs和squashfs文件系统的压缩方法。[15][16][17]
2017年,Allan Jude将Zstandard集成到FreeBSD内核中,[18] 用于概念验证OpenZFS压缩方法。[7] 随后,它被集成为核心转储(用户程序和内核崩溃)的压缩器选项。
AWS Redshift和RocksDB数据库支持使用Zstandard进行字段压缩。[19]
2018年3月,Canonical在Ubuntu Linux发行版中测试了[20]默认使用zstd作为deb包压缩方法。与deb包的xz压缩相比,级别19的zstd解压缩速度要快得多,但代价是包文件大小增加了6%。Debian开发者Ian Jackson希望再等几年再官方采用zstd来打包。[21][22][23]
2018年,该算法被发布为 RFC 8478,它还定义了相关的媒体类型“application/zstd”、文件扩展名“zst”和HTTP内容编码“zstd”。[24]
2019年10月,随着pacman 5.2包管理器的发布,Arch Linux增加了对zstd包压缩方法的支持,[25] 2020年1月,官方仓库中的包从xz转换为zstd。Arch采用zstd -c -T0 --ultra -20 -
,与xz相比,所有压缩包的大小增加了0.8%,解压速度提高了1300%;当使用多个线程时,解压内存增加了50 MiB,压缩内存会增加,但会随着使用的线程数而扩展。[26][27][28][29]
在.NSZ / .XCZ文件格式中完整实现了该算法以及多种压缩等级,[30] 由任天堂Switch混合游戏机的自制社区开发。[31]
参考资料
- . [2019-07-19] –GitHub.
- Sergio De Simone, Facebook Open-Sources New Compression Algorithm Outperforming Zlib(英文) / InfoQ, Sep 02, 2016
- . InfoQ. 2016-09-06 [2017-06-11] (中文(中国大陆)).
- . The Register. 2016-08-31 [2016-09-06].
- https://github.com/facebook/zstd/releases/tag/v1.3.4 Faster compression levels
- . GitHub (英语).
- (PDF). open-zfs.org. 2017 [2019-04-20].
- Matt Mahoney. . [2019-05-10].
- Matt Mahoney. . 2016-08-29 [2016-09-01].
- , PowTurbo
- Matt Mahoney,
- (PDF).
- . Facebook. 31 August 2016.
- Zstandard Compression and the application/zstd Media Type. Tools.ietf.org [2019-06-13]. RFC 8478.
- . lwn.net.
- . Kernelnewbies.org. [2018-08-16]. (原始内容存档于2018-01-10).
- . www.phoronix.com. [2020-06-13]. (原始内容存档于2019-07-25).
- https://github.com/freebsd/freebsd/commit/28ef16535cde21eeeaf75f6006b3a77952b3b51
- . 20 April 2019.
- Larabel, Michael. . phoronix.com. Phoronix Media. 12 March 2018 [29 October 2019].
The developers at Canonical are considering a feature freeze exception to get this newly-developed Zstd Apt/Dpkg support in Ubuntu 18.04 LTS. In doing so, they mention they would be looking at enabling Zstd compression for packages by default in Ubuntu 18.10.
- . Softpedia. Mar 12, 2018 [13 August 2018].
- . phoronix. 12 March 2018 [13 August 2018] (英语).
- RFC: Support for zstd in .deb packages?, Ian Jackson, 2018-04-27.
- Collet, Yann; Kucherawy, Murray, , Internet Engineering Task Force Request for Comments, Menlo Park, CA: IETF Trust, 2018
- https://www.phoronix.com/scan.php?page=news_item&px=Arch-Linux-Pacman-Zstd-Near
- Broda, Robin. . Arch Linux. 2020-01-04 [2020-01-05].
- [arch-dev-public RFC: (devtools) Changing default compression method to zstd], Robin Broda, 2019-03-25.
- Clarify zstd compressor output compatibility guarantees across versions, Yann Collet, assuring important for the same binary result is zstd version and compression level, 2019-03-18.
- makepkg.conf: change default compression method to zstd, Robin Broda, Levente Polyak, default compression with zstd -c -T0 --ultra -20 -, 2019-12-27.
- . GBAtemp.net - The Independent Video Game Community. [2019-11-03] (美国英语).
- Bosshard, Nico, , 2019-10-31 [2019-11-03]
- zstd/PATENTS "Additional Grant of Patent Rights Version 2", Facebook
外部链接
- 官方网站
- GitHub上的zstd頁面
- "Smaller and faster data compression with Zstandard",Yann Collet和Chip Turner,2016年8月31日,Facebook公告
- The Guardian is using ZStandard instead of zlib