Zstandard
Este artigo resulta, no todo ou em parte, de uma tradução do artigo «Zstandard» na Wikipédia em inglês, na versão original. |
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]
Autor | Yann Collet |
Desenvolvedor | Yann Collet, Przemysław Skibiński (inikep) |
Plataforma | Portável |
Lançamento | 23 de janeiro de 2015 (10 anos) |
Versão estável | 1.5.6 (27 de março de 2024[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 |
Recursos
editarO 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
editarO 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
editarZstandard | |
---|---|
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
editarA 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
editarReferências
- ↑ «Releases - facebook/zstd». GitHub. Consultado em 27 de março de 2024
- ↑ 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
- ↑ «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
- ↑ https://github.com/facebook/zstd/releases/tag/v1.3.4 Faster compression levels
- ↑ a b «ZStandard in ZFS» (PDF). open-zfs.org. 2017. Consultado em 9 de março de 2020
- ↑ Matt Mahoney. «Silesia Open Source Compression Benchmark». Consultado em 9 de março de 2020
- ↑ Matt Mahoney (29 de agosto de 2016). «Large Text Compression Benchmark, .2157 zstd». Consultado em 9 de março de 2020
- ↑ «TurboBench: Static/Dynamic web content compression benchmark». PowTurbo
- ↑ Matt Mahoney. «Silesia Open Source Compression Benchmark»
- ↑ «Facebook developers report massive speedups and compression ratio improvements when using dictionaries» (PDF)
- ↑ «Smaller and faster data compression with Zstandard». Facebook. 31 de agosto de 2016
- ↑ «facebook/zstd». GitHub
- ↑ «Zstandard Compression and the application/zstd Media Type». Tools.ietf.org. doi:10.17487/RFC8478. Consultado em 9 de março de 2020
- ↑ «The rest of the 4.14 merge window [LWN.net]». lwn.net
- ↑ «Linux_4.14 - Linux Kernel Newbies». Kernelnewbies.org. Consultado em 9 de março de 2020
- ↑ «Zstd Compression For Btrfs & Squashfs Set For Linux 4.14, Already Used Within Facebook - Phoronix». www.phoronix.com
- ↑ https://svnweb.freebsd.org/base/head/sys/contrib/zstd
- ↑ «Zstandard Encoding - Amazon Redshift». 20 de abril de 2019
- ↑ 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.
- ↑ «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
- ↑ «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
- ↑ RFC: Support for zstd in .deb packages?, Ian Jackson, 2018-04-27.
- ↑ 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
- ↑ https://www.phoronix.com/scan.php?page=news_item&px=Arch-Linux-Pacman-Zstd-Near
- ↑ 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
- ↑ 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
- ↑ [arch-dev-public RFC: (devtools) Changing default compression method to zstd], Robin Broda, 2019-03-25.
- ↑ 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.
- ↑ makepkg.conf: change default compression method to zstd, Robin Broda, Levente Polyak, default compression with zstd -c -T0 --ultra -20 -, 2019-12-27.
- ↑ «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
- ↑ 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
- ↑ «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
- ↑ zstd/PATENTS "Additional Grant of Patent Rights Version 2", Facebook
- ↑ "Zstd v1.3.1 release", GitHub "facebook/zstd"
- ↑ "New license", GitHub "facebook/zstd"
Ligações externas
editar- Sítio oficial
- zstd no GitHub
- "Smaller and faster data compression with Zstandard", Yann Collet e Chip Turner, 31 de agosto de 2016, Anúncio no Facebook (em inglês)
- «The Guardian is using ZStandard instead of zlib» (em inglês)