Zstandard

Zstandard
AutorYann Collet
DesenvolvedoresYann Collet, Przemysław Skibiński (inikep)
Lançamento inicial23 de janeiro de 2015 (11 anos)
Lançamento estável
1.5.6 / 27 de março de 2024[1]
Repositório
Escrito emC
Sistema
operacional
Multiplataforma
PlataformaPortável
TipoCompressão de dados
LicençaDupla: Licença BSD + GPLv2
Websitefacebook.github.io/zstd

Zstandard (ou zstd) é um algoritmo de compressão de dados sem perdas desenvolvido por Yann Collet no Facebook. Zstd é a implementação de referência em C. A versão 1 desta implementação foi lançada como software livre em 31 de agosto de 2016.[2][3]

Recursos

O Zstandard foi projetado para oferecer uma taxa de compressão comparável à do algoritmo DEFLATE (desenvolvido em 1991 e usado nos programas ZIP e gzip originais), porém mais rápido, especialmente para descompressão. É configurável com níveis de compressão que variam de 5 negativos (mais rápido)[4] a 22 (mais lento na velocidade de compressão, mas com a melhor taxa de compressão).

O pacote zstd inclui implementações paralelas (multi-threaded) tanto de compressão como de descompressão. A partir da versão 1.3.2 (outubro de 2017), o zstd opcionalmente implementa busca e deduplicação de longo alcance similar ao rzip ou lrzip.

A velocidade de compressão pode variar por um fator de 20 ou mais entre os níveis mais rápidos e lentos, enquanto a descompressão é uniformemente rápida, variando menos de 20% entre os níveis mais rápidos e mais lentos.[5]

O Zstd em seu nível máximo de compressão dá uma taxa de compressão próxima a lzma, lzham e ppmx, e tem um desempenho melhor que lza, ou bzip2.[6][7] O Zstandard atinge a fronteira de Pareto atual, pois se descomprime mais rapidamente do que qualquer outro algoritmo atualmente disponível com taxa de compressão similar ou melhor.[8][9]

Os dicionários podem ter um grande impacto na taxa de compressão de arquivos pequenos, por isso o Zstandard pode usar um dicionário de compressão fornecido pelo usuário. Ele também oferece um modo de treinamento, capaz de gerar um dicionário a partir de um conjunto de amostras.[10][11] Em particular, um dicionário pode ser carregado para processar grandes conjuntos de arquivos com redundância entre arquivos, mas não necessariamente dentro de cada arquivo, por exemplo, arquivos de log.

Design

O Zstandard combina um estágio de correspondência de dicionário (LZ77) com uma grande janela de busca e um estágio de codificação entrópica rápida, usando tanto a Entropia de Estado Finito (uma versão rápida de ANS, tANS, usada para entradas na seção sequências), quanto a codificação de Huffman (usada para entradas na seção de Literais).[12]

Devido à forma como o FSE transpõe o estado entre símbolos, a descompressão envolve o processamento de símbolos dentro da seção de Sequências de cada bloco em ordem inversa (do último para o primeiro).

Uso

Zstandard
Extensão de arquivo
.zst
Tipo de mídia da Internet
application/zstd[13]
Tipo de formatoCompressão de dados

O núcleo Linux tem incluído o Zstandard desde novembro de 2017 (versão 4.14) como um método de compressão para os sistemas de arquivos btrfs e squashfs.[14][15][16]

Em 2017, Allan Jude integrou o Zstandard ao núcleo FreeBSD[17] e o usou para criar um método de compressão do OpenZFS como prova de conceito.[5] Ele foi posteriormente integrado como uma opção de compressão para os dumps do núcleo (tanto de programas de usuário quanto de pânicos do kernel).

Os bancos de dados AWS Redshift e RocksDB incluem suporte para compressão de campo usando o Zstandard.[18]

Em março de 2018, a Canonical testou[19] a habilitação do zstd como um método de compressão de pacotes deb por padrão para a distribuição Linux Ubuntu. Comparado com a compressão xz de pacotes deb, o zstd no nível 19 descomprime significativamente mais rápido, mas com o custo de arquivos de pacotes 6% maiores. As pessoas do Debian, como Ian Jackson, preferem esperar cinco anos.[20][21][22]

Em 2018 o algoritmo foi publicado como RFC 8478, que também define um tipo de mídia associada "application/zstd", extensão de nome de arquivo "zst", e codificação de conteúdo HTTP "zstd".[23]

O Arch Linux adicionou suporte ao zstd como um método de compressão de pacotes em outubro de 2019 com o lançamento do gerenciador de pacotes pacman 5.2,[24] e em janeiro de 2020 mudou a compressão dos pacotes no repositório oficial de xz para o zstd. O Arch usa zstd -c -T0 --ultra -20 -, o tamanho de todos os pacotes comprimidos combinados aumentou em 0,8% (comparado ao xz), a velocidade de descompressão é 1300% mais rápida, a memória de descompressão aumentou em 50 MiB ao usar múltiplos threads, a memória de compressão aumenta, mas escala com o número de threads usados.[25][26][27][28][29]

Implementação completa do algoritmo com opção para escolher o nível de compressão utilizado nos formatos de arquivo .NSZ / .XCZ,[30] desenvolvido pela comunidade homebrew para o Nintendo Switch[31], um console de jogos híbrido.

Licença

A implementação de referência é licenciada sob a licença BSD, publicada no GitHub.[32] Desde a versão 1.0, ela teve uma concessão adicional de direitos de patente.[33]

A partir da versão 1.3.1,[34] essa concessão de patente foi removida e a licença foi alterada para uma licença dupla BSD + GPLv2.[35]

Ver também

Referências

  1. ↑ «Releases - facebook/zstd». GitHub. Consultado em 27 de março de 2024
  2. ↑ Sergio De Simone (2 de setembro de 2016). «Facebook Open-Sources New Compression Algorithm Outperforming Zlib». InfoQ. Consultado em 9 de março de 2020
  3. ↑ «Life imitates satire: Facebook touts zlib killer just like Silicon Valley's Pied Piper». The Register. 31 de agosto de 2016. Consultado em 9 de março de 2020
  4. ↑ https://github.com/facebook/zstd/releases/tag/v1.3.4 Faster compression levels
  5. 1 2 «ZStandard in ZFS» (PDF). open-zfs.org. 2017. Consultado em 9 de março de 2020
  6. ↑ Matt Mahoney. «Silesia Open Source Compression Benchmark». Consultado em 9 de março de 2020
  7. ↑ Matt Mahoney (29 de agosto de 2016). «Large Text Compression Benchmark, .2157 zstd». Consultado em 9 de março de 2020
  8. ↑ «TurboBench: Static/Dynamic web content compression benchmark». PowTurbo
  9. ↑ Matt Mahoney. «Silesia Open Source Compression Benchmark»
  10. ↑ «Facebook developers report massive speedups and compression ratio improvements when using dictionaries» (PDF)
  11. ↑ «Smaller and faster data compression with Zstandard». Facebook. 31 de agosto de 2016
  12. ↑ «facebook/zstd». GitHub
  13. ↑ «Zstandard Compression and the application/zstd Media Type». Tools.ietf.org. doi:10.17487/RFC8478. Consultado em 9 de março de 2020
  14. ↑ «The rest of the 4.14 merge window [LWN.net]». lwn.net
  15. ↑ «Linux_4.14 - Linux Kernel Newbies». Kernelnewbies.org. Consultado em 9 de março de 2020
  16. ↑ «Zstd Compression For Btrfs & Squashfs Set For Linux 4.14, Already Used Within Facebook - Phoronix». www.phoronix.com
  17. ↑ https://svnweb.freebsd.org/base/head/sys/contrib/zstd
  18. ↑ «Zstandard Encoding - Amazon Redshift». 20 de abril de 2019
  19. ↑ Larabel, Michael (12 de março de 2018). «Canonical Working On Zstd-Compressed Debian Packages For Ubuntu». phoronix.com. Phoronix Media. Consultado em 9 de março de 2020. 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.
  20. ↑ «New Ubuntu Installs Could Be Speed Up by 10% with the Zstd Compression Algorithm». Softpedia. 12 de março de 2018. Consultado em 9 de março de 2020
  21. ↑ «Canonical Working On Zstd-Compressed Debian Packages For Ubuntu». phoronix (em inglês). 12 de março de 2018. Consultado em 9 de março de 2020
  22. ↑ RFC: Support for zstd in .deb packages?, Ian Jackson, 2018-04-27.
  23. ↑ Collet, Yann; Kucherawy, Murray (2018). «RFC 8478: Zstandard Compression and the application/zstd Media Type». Internet Engineering Task Force Request for Comments. Menlo Park, CA: IETF Trust
  24. ↑ https://www.phoronix.com/scan.php?page=news_item&px=Arch-Linux-Pacman-Zstd-Near
  25. ↑ Broda, Robin (4 de janeiro de 2020). «Now using Zstandard instead of xz for package compression». Arch Linux. Consultado em 9 de março de 2020
  26. ↑ Fontenelle, Rafael (14 de janeiro de 2020). «Agora usando Zstandard em vez de xz para compressão de pacotes». Arch Linux Brasil. Consultado em 9 de março de 2020
  27. ↑ [arch-dev-public RFC: (devtools) Changing default compression method to zstd], Robin Broda, 2019-03-25.
  28. ↑ 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.
  29. ↑ makepkg.conf: change default compression method to zstd, Robin Broda, Levente Polyak, default compression with zstd -c -T0 --ultra -20 -, 2019-12-27.
  30. ↑ «RELEASE - nsZip - NSP compressor/decompressor to reduce storage». GBAtemp.net - The Independent Video Game Community (em inglês). Consultado em 9 de março de 2020
  31. ↑ Bosshard, Nico (31 de outubro de 2019). «nsZip is a tool to compress/decompress Nintendo Switch games using the here specified NSZ file format: nicoboss/nsZip». Consultado em 9 de março de 2020
  32. ↑ «Facebook open sources Zstandard data compression algorithm, aims to replace technology behind Zip». ZDnet. 31 de agosto de 2016. Consultado em 9 de março de 2020
  33. ↑ zstd/PATENTS "Additional Grant of Patent Rights Version 2", Facebook
  34. ↑ "Zstd v1.3.1 release", GitHub "facebook/zstd"
  35. ↑ "New license", GitHub "facebook/zstd"

Ligações externas