상위 질문
타임라인
채팅
관점
Zstd
위키백과, 무료 백과사전
Remove ads
Zstandard는 페이스북의 Yann Collet이 개발한 비손실 데이터 압축 알고리즘이다. Zstd는 해당 C로 된 참조 구현이며, 2016년 8월 31일 오픈 소스 소프트웨어로 공개되었다.[3][4]
이 알고리즘은 2018년에 RFC 8478로 발행되었으며, 관련 미디어 타입 "application/zstd", 파일 확장자 "zst", 그리고 HTTP 콘텐츠 인코딩 "zstd"를 정의한다.[5]
Remove ads
특징
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] 특히, 하나의 사전을 로드하여 파일 내에는 중복이 없더라도 파일 간에 중복이 있는 대규모 파일 집합(예: 로그 파일)을 처리할 수 있다.
Remove ads
설계
Zstandard는 사전 일치 단계(LZ77)와 큰 검색 창, 그리고 빠른 엔트로피 부호화 단계를 결합한다. 이는 허프먼 부호화(리터럴 섹션의 항목에 사용됨)[15]와 유한 상태 엔트로피(FSE) –ANS의 빠른 테이블 버전인 tANS–를 시퀀스 섹션의 항목에 사용한다. FSE가 기호 간에 상태를 전달하는 방식 때문에 압축 해제는 각 블록의 시퀀스 섹션 내 기호를 역순(마지막부터 처음까지)으로 처리하는 것을 포함한다.
사용
요약
관점
리눅스 커널은 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
- 브로틀리 – 브라우저에 통합됨
각주
외부 링크
Wikiwand - on
Seamless Wikipedia browsing. On steroids.
Remove ads