Zstandard – Wikipédia, a enciclopédia livre

Zstandard
Autor Yann Collet
Desenvolvedor Yann Collet, Przemysław Skibiński (inikep)
Plataforma Portável
Lançamento 23 de janeiro de 2015 (9 anos)
Versão estável 1.5.6 (27 de março de 2024; há 30 dias[1])
Escrito em C
Sistema operacional Multiplataforma
Gênero(s) Compressão de dados
Licença Dupla: Licença BSD + GPLv2
Página oficial facebook.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[editar | editar código-fonte]

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[editar | editar código-fonte]

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[editar | editar código-fonte]

Zstandard
Extensão do arquivo .zst
MIME application/zstd[13]
Tipo de formato Compressã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[editar | editar código-fonte]

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[editar | editar código-fonte]

  • Zlib
  • LZFSE – um algoritmo similar da Apple utilizado desde o iOS 9 e o OS X 10.11 tornado código aberto em junho de 2016
  • LZ4 – um membro rápido da família LZ77

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. a b «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[editar | editar código-fonte]