Zstd

Zstandard는 페이스북의 Yann Collet이 개발한 비손실 데이터 압축 알고리즘이다. Zstd는 해당 C로 된 참조 구현이며, 2016년 8월 31일 오픈 소스 소프트웨어로 공개되었다.

이 알고리즘은 2018년에 로 발행되었으며, 관련 미디어 타입 "application/zstd", 파일 확장자 "zst", 그리고 HTTP 콘텐츠 인코딩 "zstd"를 정의한다.  

특징
Zstandard는 DEFLATE 알고리즘(1991년에 개발되어 원본 ZIP 및 gzip 프로그램에 사용됨)과 유사한 압축비를 제공하지만, 특히 압축 해제 속도가 더 빠르도록 설계되었다. 압축 수준은 음수 7(가장 빠름)부터 22(압축 속도는 가장 느리지만 최상의 압축비)까지 조절 가능하다.

버전 1.3.2(2017년 10월)부터 zstd는 rzip 또는 lrzip과 유사하게 매우 긴 범위의 검색 및 중복 제거(, 128 MiB 창)를 선택적으로 구현한다.

압축 속도는 가장 빠른 수준과 가장 느린 수준 간에 20배 이상 차이가 날 수 있지만, 압축 해제는 균일하게 빠르며 가장 빠른 수준과 가장 느린 수준 간에 20% 미만의 차이를 보인다. Zstandard 명령줄에는 I/O 조건, 주로 출력 기록 속도에 따라 압축 수준을 변경하는 "적응형"() 모드가 있다.

Zstd는 최대 압축 수준에서 LZMA, LZHAM, PPMX와 유사한 압축비를 제공하며, LHA 또는 bzip2보다 성능이 더 좋다. Zstandard는 현재 파레토 최전선에 도달했으며, 유사하거나 더 나은 압축비를 가진 다른 어떤 현재 사용 가능한 알고리즘보다 빠르게 압축을 해제한다.

사전은 작은 파일의 압축비에 큰 영향을 미칠 수 있으므로 Zstandard는 사용자가 제공한 압축 사전을 사용할 수 있다. 또한 샘플 집합에서 사전을 생성할 수 있는 훈련 모드를 제공한다. 특히, 하나의 사전을 로드하여 파일 내에는 중복이 없더라도 파일 간에 중복이 있는 대규모 파일 집합(예: 로그 파일)을 처리할 수 있다.

설계

Zstandard는 사전 일치 단계(LZ77)와 큰 검색 창, 그리고 빠른 엔트로피 부호화 단계를 결합한다. 이는 허프먼 부호화(리터럴 섹션의 항목에 사용됨)와 유한 상태 엔트로피(FSE) ANS의 빠른 테이블 버전인 tANS를 시퀀스 섹션의 항목에 사용한다. FSE가 기호 간에 상태를 전달하는 방식 때문에 압축 해제는 각 블록의 시퀀스 섹션 내 기호를 역순(마지막부터 처음까지)으로 처리하는 것을 포함한다.

사용

리눅스 커널은 2017년 11월(버전 4.14)부터 btrfs 및 squashfs 파일 시스템의 압축 방법으로 Zstandard를 포함했다.

2017년 Allan Jude는 Zstandard를 FreeBSD 커널에 통합했으며, 이후 코어 덤프(사용자 프로그램 및 커널 패닉 모두)의 압축 옵션으로 통합되었다. 또한 개념 증명 OpenZFS 압축 방법을 만드는 데 사용되었으며 2020년에 통합되었다.

AWS 레드쉬프트 및 RocksDB 데이터베이스는 Zstandard를 사용한 필드 압축을 지원한다.

2018년 3월, 캐노니컬은 우분투 리눅스 배포판의 deb 패키지 압축 방법으로 zstd를 기본값으로 사용하는 것을 테스트했다. deb 패키지의 xz 압축과 비교할 때, zstd 레벨 19는 패키지 파일이 6% 더 커지는 대신 압축 해제 속도가 상당히 빠르다. 2018년 4월(버전 1.6~rc1)에 데비안(및 이후 우분투)에 지원이 추가되었다.

페도라는 2018년 5월(페도라 릴리스 28)에 RPM에 ZStandard 지원을 추가했으며, 2019년 10월(페도라 31) 릴리스 패키징에 사용했다. 페도라 33에서는 파일 시스템이 기본적으로 zstd로 압축된다.

아치 리눅스는 2019년 10월 pacman 5.2 패키지 관리자 출시와 함께 zstd를 패키지 압축 방법으로 지원했으며, 2020년 1월에는 공식 저장소의 패키지에 xz 대신 zstd로 전환했다. 아치는 zstd -c -T0 --ultra -20 -를 사용하며, 모든 압축된 패키지의 총 크기는 0.8% 증가했지만(xz 대비), 압축 해제 속도는 14배 빨라졌고, 여러 스레드를 사용할 때 압축 해제 메모리는 50 MiB 증가했으며, 압축 메모리는 증가했지만 사용된 스레드 수에 비례한다. 아치 리눅스는 나중에 mkinitcpio 초기 램디스크 생성기의 기본 압축 알고리즘으로도 zstd로 전환했다.

압축 수준을 선택할 수 있는 알고리즘의 전체 구현은 닌텐도 스위치 하이브리드 게임 콘솔용 홈브루 커뮤니티에서 개발한 .NSZ/.XCZ 파일 형식에 사용된다. 또한 .RVZ Wii 및 닌텐도 게임큐브 디스크 이미지 파일 형식에서 지원되는 여러 압축 알고리즘 중 하나이다.

2020년 6월 15일, Zstandard는 zip 파일 형식의 버전 6.3.8에 코덱 번호 93으로 구현되었으며, 6월 1일에 출시된 버전 6.3.7에 구현된 이전 코덱 번호 20은 더 이상 사용되지 않게 되었다.

2024년 3월, 구글 크롬 버전 123(및 크로미엄 기반 브라우저인 브레이브 또는 마이크로소프트 엣지 등)은 HTTP 헤더 Content-Encoding에 zstd 지원을 추가했다. 2024년 5월, 모질라 파이어폭스 릴리스 126.0은 HTTP 헤더 Content-Encoding에 zstd 지원을 추가했다.

라이선스
참조 구현은 BSD 허가서에 따라 깃허브에 게시되었다. 2016년 8월 31일 출시된 버전 1.0부터 추가적인 특허 권한 부여가 있었다.

2017년 8월 20일 출시된 버전 1.3.1부터 이 특허 부여는 철회되었고 라이선스는 BSD + GPLv2 이중 라이선스로 변경되었다.

 같이 보기 
 LZ4 (압축 알고리즘) – LZ77 계열의 빠른 멤버
 LZFSE – iOS 9 및 OS X 10.11부터 애플이 사용하고 2016년 6월 1일에 오픈 소스로 공개된 유사한 알고리즘
 Zlib
 브로틀리 – 브라우저에 통합됨

 각주 

 외부 링크 



 "Zstandard를 이용한 더 작고 빠른 데이터 압축", Yann Collet 및 Chip Turner, 2016년 8월 31일, 페이스북 공지
 더 가디언은 zlib 대신 ZStandard를 사용하고 있다

분류:C 라이브러리
분류:데이터 압축
분류:무손실 압축 알고리즘
분류:자유 압축 소프트웨어
분류:BSD 라이선스 소프트웨어
분류:2016년 소프트웨어