Zstd
Zstandard는 페이스북의 Yann Collet이 개발한 비손실 데이터 압축 알고리즘이다. Zstd는 해당 C로 된 참조 구현이며, 2016년 8월 31일 오픈 소스 소프트웨어로 공개되었다.[3][4]
| 원저자 | Yann Collet |
|---|---|
| 개발자 | Yann Collet, Nick Terrell, Przemysław Skibiński[1] |
| 발표일 | 2015년 1월 23일 |
| 안정화 버전 | 1.5.7[2] |
| 저장소 | |
| 프로그래밍 언어 | C |
| 운영 체제 | 크로스 플랫폼 |
| 플랫폼 | Portable |
| 종류 | 데이터 압축 |
| 라이선스 | BSD-3-Clause 또는 GPL-2.0-or-later (이중 라이선스) |
| 웹사이트 | facebook |
이 알고리즘은 2018년에 RFC 8478로 발행되었으며, 관련 미디어 타입 "application/zstd", 파일 확장자 "zst", 그리고 HTTP 콘텐츠 인코딩 "zstd"를 정의한다.[5]
특징
편집Zstandard는 DEFLATE 알고리즘(1991년에 개발되어 원본 ZIP 및 gzip 프로그램에 사용됨)과 유사한 압축비를 제공하지만, 특히 압축 해제 속도가 더 빠르도록 설계되었다. 압축 수준은 음수 7(가장 빠름)[6]부터 22(압축 속도는 가장 느리지만 최상의 압축비)까지 조절 가능하다.
버전 1.3.2(2017년 10월)부터 zstd는 rzip 또는 lrzip과 유사하게 매우 긴 범위의 검색 및 중복 제거(--long, 128 MiB 창)를 선택적으로 구현한다.[7]
압축 속도는 가장 빠른 수준과 가장 느린 수준 간에 20배 이상 차이가 날 수 있지만, 압축 해제는 균일하게 빠르며 가장 빠른 수준과 가장 느린 수준 간에 20% 미만의 차이를 보인다.[8] Zstandard 명령줄에는 I/O 조건, 주로 출력 기록 속도에 따라 압축 수준을 변경하는 "적응형"(--adapt) 모드가 있다.
Zstd는 최대 압축 수준에서 LZMA, LZHAM, PPMX와 유사한 압축비를 제공하며, 틀:Synthesis span[9][10] Zstandard는 현재 파레토 최전선에 도달했으며, 유사하거나 더 나은 압축비를 가진 다른 어떤 현재 사용 가능한 알고리즘보다 빠르게 압축을 해제한다.[11][12]
사전은 작은 파일의 압축비에 큰 영향을 미칠 수 있으므로 Zstandard는 사용자가 제공한 압축 사전을 사용할 수 있다. 또한 샘플 집합에서 사전을 생성할 수 있는 훈련 모드를 제공한다.[13][14] 특히, 하나의 사전을 로드하여 파일 내에는 중복이 없더라도 파일 간에 중복이 있는 대규모 파일 집합(예: 로그 파일)을 처리할 수 있다.
설계
편집Zstandard는 사전 일치 단계(LZ77)와 큰 검색 창, 그리고 빠른 엔트로피 부호화 단계를 결합한다. 이는 허프먼 부호화(리터럴 섹션의 항목에 사용됨)[15]와 유한 상태 엔트로피(FSE) –ANS의 빠른 테이블 버전인 tANS–를 시퀀스 섹션의 항목에 사용한다. FSE가 기호 간에 상태를 전달하는 방식 때문에 압축 해제는 각 블록의 시퀀스 섹션 내 기호를 역순(마지막부터 처음까지)으로 처리하는 것을 포함한다.
사용
편집| 파일 확장자 | .zst[16] |
|---|---|
| 인터넷 미디어 타입 |
application/zstd[16] |
| 매직 넘버 | 28 b5 2f fd[16] |
| 포맷 종류 | 데이터 압축 |
| 표준 | RFC 8878 |
| 웹사이트 | github |
| 매직 넘버 | 37 a4 30 ec[16] |
|---|---|
| 표준 | RFC 8878 |
| 웹사이트 | github |
리눅스 커널은 2017년 11월(버전 4.14)부터 btrfs 및 squashfs 파일 시스템의 압축 방법으로 Zstandard를 포함했다.[17][18][19]
2017년 Allan Jude는 Zstandard를 FreeBSD 커널에 통합했으며,[20] 이후 코어 덤프(사용자 프로그램 및 커널 패닉 모두)의 압축 옵션으로 통합되었다. 또한 개념 증명 OpenZFS 압축 방법을 만드는 데 사용되었으며[8] 2020년에 통합되었다.[21]
AWS 레드쉬프트 및 RocksDB 데이터베이스는 Zstandard를 사용한 필드 압축을 지원한다.[22]
2018년 3월, 캐노니컬은 우분투 리눅스 배포판의 deb 패키지 압축 방법으로 zstd를 기본값으로 사용하는 것을 테스트했다.[23] deb 패키지의 xz 압축과 비교할 때, zstd 레벨 19는 패키지 파일이 6% 더 커지는 대신 압축 해제 속도가 상당히 빠르다. 2018년 4월(버전 1.6~rc1)에 데비안(및 이후 우분투)에 지원이 추가되었다.[24][23][25]
페도라는 2018년 5월(페도라 릴리스 28)에 RPM에 ZStandard 지원을 추가했으며, 2019년 10월(페도라 31) 릴리스 패키징에 사용했다.[26] 페도라 33에서는 파일 시스템이 기본적으로 zstd로 압축된다.[27][28]
아치 리눅스는 2019년 10월 pacman 5.2 패키지 관리자 출시와 함께 zstd를 패키지 압축 방법으로 지원했으며,[29] 2020년 1월에는 공식 저장소의 패키지에 xz 대신 zstd로 전환했다. 아치는 zstd -c -T0 --ultra -20 -를 사용하며, 모든 압축된 패키지의 총 크기는 0.8% 증가했지만(xz 대비), 압축 해제 속도는 14배 빨라졌고, 여러 스레드를 사용할 때 압축 해제 메모리는 50 MiB 증가했으며, 압축 메모리는 증가했지만 사용된 스레드 수에 비례한다.[30][31][32] 아치 리눅스는 나중에 mkinitcpio 초기 램디스크 생성기의 기본 압축 알고리즘으로도 zstd로 전환했다.[33]
압축 수준을 선택할 수 있는 알고리즘의 전체 구현은 닌텐도 스위치 하이브리드 게임 콘솔용 홈브루 커뮤니티에서 개발한 .NSZ/.XCZ[34] 파일 형식에 사용된다.[35] 또한 .RVZ Wii 및 닌텐도 게임큐브 디스크 이미지 파일 형식에서 지원되는 여러 압축 알고리즘 중 하나이다.
2020년 6월 15일, Zstandard는 zip 파일 형식의 버전 6.3.8에 코덱 번호 93으로 구현되었으며, 6월 1일에 출시된 버전 6.3.7에 구현된 이전 코덱 번호 20은 더 이상 사용되지 않게 되었다.[36][37]
2024년 3월, 구글 크롬 버전 123(및 크로미엄 기반 브라우저인 브레이브 또는 마이크로소프트 엣지 등)은 HTTP 헤더 Content-Encoding에 zstd 지원을 추가했다.[38] 2024년 5월, 모질라 파이어폭스 릴리스 126.0은 HTTP 헤더 Content-Encoding에 zstd 지원을 추가했다.[39]
라이선스
편집참조 구현은 BSD 허가서에 따라 깃허브에 게시되었다.[40] 2016년 8월 31일 출시된 버전 1.0부터[41] 추가적인 특허 권한 부여가 있었다.[42]
2017년 8월 20일 출시된 버전 1.3.1부터[43] 이 특허 부여는 철회되었고 라이선스는 BSD + GPLv2 이중 라이선스로 변경되었다.[44]
같이 보기
편집- LZ4 (압축 알고리즘) – LZ77 계열의 빠른 멤버
- LZFSE – iOS 9 및 OS X 10.11부터 애플이 사용하고 2016년 6월 1일에 오픈 소스로 공개된 유사한 알고리즘
- Zlib
- 브로틀리 – 브라우저에 통합됨
각주
편집- ↑ “Contributors to facebook/zstd”. 《github.com》. 2021년 1월 27일에 원본 문서에서 보존된 문서. 2021년 1월 26일에 확인함.
- ↑ “Release Zstandard v1.5.7” (영어). 2025년 2월 21일에 확인함.
- ↑ Sergio De Simone (2016년 9월 2일). “Facebook Open-Sources New Compression Algorithm Outperforming Zlib”. InfoQ. 2021년 10월 7일에 원본 문서에서 보존된 문서. 2019년 4월 20일에 확인함.
- ↑ “Life imitates satire: Facebook touts zlib killer just like Silicon Valley's Pied Piper”. 더 레지스터. 2016년 8월 31일. 2016년 9월 3일에 원본 문서에서 보존된 문서. 2016년 9월 6일에 확인함.
- ↑ Collet, Yann (October 2018). Kucherawy, Murray S.. ed. Zstandard Compression and the application/zstd Media Type. RFC 8478. https://tools.ietf.org/html/rfc8478. Retrieved 7 October 2020.
- ↑ “Release Zstandard v1.3.4 - faster everything · facebook/zstd” (영어). 《GitHub》. 2021년 9월 11일에 원본 문서에서 보존된 문서. 2024년 3월 27일에 확인함.
- ↑ “Command Line Interface for Zstandard library” (영어). 《GitHub》. 2021년 10월 28일.
- ↑ 가 나 “ZStandard in ZFS” (PDF). 《open-zfs.org》. 2017. 2019년 12월 18일에 원본 문서 (PDF)에서 보존된 문서. 2019년 4월 20일에 확인함.
- ↑ Matt Mahoney. “Silesia Open Source Compression Benchmark”. 2022년 1월 21일에 원본 문서에서 보존된 문서. 2019년 5월 10일에 확인함.
- ↑ Matt Mahoney (2016년 8월 29일). “Large Text Compression Benchmark, .2157 zstd”. 2022년 3월 31일에 원본 문서에서 보존된 문서. 2016년 9월 1일에 확인함.
- ↑ 《TurboBench: Static/Dynamic web content compression benchmark》, PowTurbo, 2022년 3월 17일에 원본 문서에서 보존된 문서, 2018년 3월 21일에 확인함
- ↑ Matt Mahoney, 《Silesia Open Source Compression Benchmark》, 2022년 1월 21일에 원본 문서에서 보존된 문서, 2018년 4월 5일에 확인함
- ↑ “Facebook developers report massive speedups and compression ratio improvements when using dictionaries” (PDF). 《페르미 국립 가속기 연구소》. 2017년 10월 11일. 2018년 1월 25일에 원본 문서 (PDF)에서 보존된 문서. 2024년 3월 27일에 확인함.
- ↑ “Smaller and faster data compression with Zstandard”. Facebook. 2016년 8월 31일. 2020년 11월 8일에 원본 문서에서 보존된 문서. 2016년 9월 3일에 확인함.
- ↑ “facebook/zstd”. 《GitHub》. 2021년 10월 28일.
- ↑ 가 나 다 라 Collet, Yann (February 2021). Kucherawy, Murray S.. ed. Zstandard Compression and the application/zstd Media Type. RFC 8878. https://tools.ietf.org/html/rfc8878. Retrieved 26 February 2023.
- ↑ Corbet, Jonathan (2017년 9월 17일). “The rest of the 4.14 merge window [LWN.net]”. 《lwn.net》. 2021년 11월 22일에 원본 문서에서 보존된 문서. 2024년 3월 27일에 확인함.
- ↑ “Linux_4.14 - Linux Kernel Newbies”. Kernelnewbies.org. 2017년 12월 30일. 2018년 1월 10일에 원본 문서에서 보존된 문서. 2018년 8월 16일에 확인함.
- ↑ Larabel, Michael (2017년 9월 8일). “Zstd Compression For Btrfs & Squashfs Set For Linux 4.14, Already Used Within Facebook - Phoronix”. 《www.phoronix.com》. 2019년 7월 25일에 원본 문서에서 보존된 문서. 2017년 11월 13일에 확인함.
- ↑ “Integrate ZSTD into the kernel · freebsd/Freebsd-SRC@28ef165”. 《GitHub》.
- ↑ “Add ZSTD support to ZFS · openzfs/ZFS@10b3c7f”. 《GitHub》. 2020년 9월 10일에 원본 문서에서 보존된 문서. 2020년 10월 12일에 확인함.
- ↑ “Zstandard Encoding - Amazon Redshift”. 2019년 4월 20일. 2021년 8월 14일에 원본 문서에서 보존된 문서. 2018년 1월 24일에 확인함.
- ↑ 가 나 Larabel, Michael (2018년 3월 12일). “Canonical Working On Zstd-Compressed Debian Packages For Ubuntu”. 《phoronix.com》. Phoronix Media. 2021년 8월 16일에 원본 문서에서 보존된 문서. 2019년 10월 29일에 확인함.
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.
- ↑ “New Ubuntu Installs Could Be Speed Up by 10% with the Zstd Compression Algorithm”. 《Softpedia》. 2018년 3월 12일. 2021년 10월 6일에 원본 문서에서 보존된 문서. 2018년 8월 13일에 확인함.
- ↑ “Debian Changelog for apt” (영어). 《Debian》. 2021년 4월 19일. 2022년 11월 7일에 확인함.
- ↑ “Changes/Switch RPMS to ZSTD compression”. 《Fedora Project Wiki》. 2019년 6월 2일에 원본 문서에서 보존된 문서. 2020년 7월 8일에 확인함.
- ↑ “Fedora Workstation 34 feature focus: Btrfs transparent compression” (미국 영어). 《Fedora Magazine》. 2021년 4월 14일. 2022년 5월 12일에 확인함.
- ↑ “Changes/BtrfsTransparentCompression”. 《Fedora Project Wiki》. 2022년 5월 12일에 확인함.
- ↑ Larabel, Michael (2019년 10월 16일). “Arch Linux Nears Roll-Out of ZSTD Compressed Packages for Faster Pacman Installs”. 《Phoronix》. 2022년 3월 18일에 원본 문서에서 보존된 문서. 2019년 10월 21일에 확인함.
- ↑ Broda, Mara (2020년 1월 4일). “Now using Zstandard instead of xz for package compression”. 《Arch Linux》. 2022년 3월 18일에 원본 문서에서 보존된 문서. 2020년 1월 5일에 확인함.
- ↑ Broda, Mara (2019년 3월 25일). “RFC: (devtools) Changing default compression method to zstd” (메일링 리스트). 《arch-dev-public》. 2021년 8월 17일에 원본 문서에서 보존된 문서. 2020년 1월 5일에 확인함.
- ↑ Broda, Mara; Polyak, Levente (2019년 12월 27일). “makepkg.conf: change default compression method to zstd”. 《GitHub》.
- ↑ Razzolini, Giancarlo (2021년 2월 19일). “News: Moving to Zstandard images by default on mkinitcpio”. 《Arch Linux》. 2021년 12월 28일에 확인함.
- ↑ “RELEASE - nsZip - NSP compressor/decompressor to reduce storage” (미국 영어). 《GBAtemp.net - The Independent Video Game Community》. 2019년 10월 20일. 2021년 8월 15일에 원본 문서에서 보존된 문서. 2019년 11월 3일에 확인함.
- ↑ Bosshard, Nico (2019년 10월 31일), 《nsZip is a tool to compress/decompress Nintendo Switch games using the here specified NSZ file format: nicoboss/nsZip》, 2022년 3월 27일에 원본 문서에서 보존된 문서, 2019년 11월 3일에 확인함
- ↑ 《APPNOTE.TXT - .ZIP File Format Specification Version: 6.3.8》, 2020년 6월 15일, 2020년 7월 7일에 확인함
- ↑ 《APPNOTE.TXT - .ZIP File Format Specification Version: 6.3.7》, 2020년 6월 1일, 2020년 6월 6일에 확인함
- ↑ “New in Chrome 123 | Chrome Blog” (영어). 《Chrome for Developers》. 2024년 3월 19일. 2024년 4월 16일에 확인함.
- ↑ “Firefox 126.0, See All New Features, Updates and Fixes”. 2024년 5월 13일에 원본 문서에서 보존된 문서. 2024년 5월 15일에 확인함.
- ↑ “Facebook open sources Zstandard data compression algorithm, aims to replace technology behind Zip”. ZDnet. 2016년 8월 31일. 2016년 9월 1일에 확인함.
- ↑ “Zstandard v1.0”. 《GitHub》. 2016년 8월 31일. 2023년 4월 7일에 원본 문서에서 보존된 문서. 2025년 1월 23일에 확인함.
- ↑ “v1.3.0/PATENTS · facebook/zstd” (영어). 《GitHub》. 2016년 8월 30일. 2021년 5월 15일에 원본 문서에서 보존된 문서. 2024년 3월 27일에 확인함.
- ↑ “Release Zstandard v1.3.1 · facebook/zstd” (영어). 《GitHub》. 2017년 8월 20일. 2020년 9월 12일에 원본 문서에서 보존된 문서. 2024년 3월 27일에 확인함.
- ↑ “New license by Cyan4973 · Pull Request #801 · facebook/zstd” (영어). 《GitHub》. 2017년 8월 19일. 2020년 9월 12일에 원본 문서에서 보존된 문서. 2024년 3월 27일에 확인함.
외부 링크
편집- Zstd - 공식 웹사이트
- (영어) zstd - 깃허브
- (영어) Zstandard가 있는 7zip - 깃허브
- "Zstandard를 이용한 더 작고 빠른 데이터 압축", Yann Collet 및 Chip Turner, 2016년 8월 31일, 페이스북 공지
- 더 가디언은 zlib 대신 ZStandard를 사용하고 있다