O Que É Zstandard (zst)? O Algoritmo de Compressão do Facebook
A Versão Curta: O Que Zstandard Realmente É
Zstandard — frequentemente abreviado para zstd, com a extensão de arquivo .zst — é um algoritmo de compressão de dados sem perdas criado por Yann Collet no Facebook (agora Meta). Foi lançado como código aberto em 2016 e rapidamente ganhou força; o kernel Linux o adotou na versão 5.16. O próprio Facebook confia no zstd em sua infraestrutura massiva, compactando tudo, desde snapshots de banco de dados a arquivos de log. O formato é agora um padrão oficial da internet, totalmente documentado na RFC 8878. Por baixo do capô, o zstd combina uma abordagem LZ77 baseada em dicionário com um codificador de entropia moderno chamado Asymmetric Numeral Systems (ANS). Em termos práticos, isso significa que ele compacta e descompacta dados em velocidades incríveis, muitas vezes sem sacrificar muito a taxa de compressão em comparação com algoritmos mais lentos e tradicionais. A extensão .zst significa o formato compactado de stream único. Você também verá .tar.zst, que é simplesmente um arquivo tar compactado com zstd, assim como os conhecidos .tar.gz ou .tar.bz2. Se você baixou um pacote Linux, um backup de banco de dados ou um grande conjunto de dados recentemente, há uma boa chance de ter sido um arquivo .zst ou .tar.zst.
Como Zstandard se Compara a gzip, bzip2 e xz
Ao escolher uma ferramenta de compressão, você está sempre equilibrando três fatores: o quão pequeno o resultado fica (taxa de compressão), o quão rápido ele compacta e o quão rápido ele descompacta. O Zstandard foi projetado desde o início para superar o venerável gzip em todas as três frentes de uma só vez — uma afirmação que parece boa demais para ser verdade, mas que em grande parte se sustenta. Os próprios benchmarks do Facebook no corpus Silesia, um conjunto de testes padrão, mostram o zstd em seu nível padrão (nível 3) atingindo uma taxa de 2.884x a uma velocidade de compactação vertiginosa de 500 MB/s e mais de 1.600 MB/s de descompactação. Para comparação, o nível padrão do gzip obtém uma taxa de 2.743x a cerca de 130 MB/s de compactação e 400 MB/s de descompactação. Os números não mentem: o zstd é mais rápido em ambas as direções e compacta os arquivos um pouco mais por padrão. Outras ferramentas como o bzip2 podem atingir uma taxa melhor (cerca de 3.0x), mas a passos de tartaruga, muitas vezes abaixo de 20 MB/s para compactação. E embora o xz leve as taxas além de 3.2x, sua velocidade de compactação abaixo de 10 MB/s o torna inviável para qualquer coisa sensível ao tempo. O verdadeiro poder do Zstd vem de seus 22 níveis de compactação. O Nível 1 é todo sobre velocidade, perfeito para compactar tráfego de rede em tempo real. No outro extremo, os níveis 19–22 (os modos "ultra") competem com a taxa de compactação do xz, enquanto ainda descompactam uma ordem de magnitude mais rápido. A maioria das pessoas se limita à faixa de 3 a 9. No Linux, você pode controlar isso facilmente: `zstd -9 myfile.tar` levará mais tempo de CPU, mas produzirá um arquivo menor do que o padrão `zstd -3 myfile.tar`.
Treinamento de Dicionário: O Recurso Que a Maioria das Pessoas Ignora
A compressão por dicionário é um dos recursos mais poderosos — e mais negligenciados — do zstd. Algoritmos de compressão padrão funcionam encontrando padrões repetitivos dentro de um único arquivo. Mas e se o arquivo for minúsculo, como um payload JSON de 2 KB? Simplesmente não há dados suficientes para o algoritmo construir um modelo útil do que se repete, então a taxa de compressão é frequentemente terrível. Em alguns casos, o arquivo 'compactado' pode até acabar maior que o original. O treinamento de dicionário é a solução. Você pode alimentar o zstd com uma grande amostra de seus dados — digamos, milhares de pequenos arquivos de log ou objetos JSON semelhantes — e ele gerará um único arquivo de dicionário que captura todos os seus padrões comuns. Então, tanto o compressor quanto o descompressor usam este dicionário compartilhado como ponto de partida. O Facebook relatou ter alcançado 6x de compressão em pequenos blobs JSON que, de outra forma, mal se compactavam, usando exatamente essa técnica. Para experimentar você mesmo na linha de comando, primeiro você treina um dicionário: `zstd --train /path/to/samples/* -o mydict.zst-dict`. Em seguida, você o usa para compactar um arquivo: `zstd -D mydict.zst-dict smallfile.json`. A única ressalva é que o descompressor também precisa exatamente do mesmo arquivo de dicionário. Isso o torna um desafio operacional; você precisa armazenar e distribuir o dicionário junto com seus dados. Então, quem realmente usa isso? É um divisor de águas para engenheiros de banco de dados, desenvolvedores de backend que compactam respostas de API e qualquer pessoa que lida com grandes volumes de arquivos pequenos e estruturalmente semelhantes. Para o usuário médio que apenas compacta uma pasta, o zstd padrão é mais do que suficiente.
Onde Você Realmente Encontra Arquivos .zst
Você provavelmente já usou zstd sem nem mesmo perceber. O algoritmo se espalhou muito além dos servidores do Facebook e agora é uma parte crítica do cenário de software moderno. Aqui estão alguns lugares concretos onde você encontrará arquivos .zst na prática: **Gerenciadores de pacotes Linux.** O Arch Linux fez a transição de .tar.xz para .tar.zst em 2020, citando melhorias massivas na velocidade de instalação de pacotes. O Fedora seguiu o exemplo desde então. Ao executar `pacman -S` ou `dnf install`, você está baixando e descompactando arquivos compactados .zst. **O próprio kernel Linux.** Desde a versão 5.16, a imagem do kernel (bzImage) e o initramfs podem ser compactados com zstd. Algumas distribuições agora entregam kernels compactados com zstd por padrão para um tempo de inicialização notavelmente mais rápido. **Sistemas de banco de dados e armazenamento.** O RocksDB do próprio Facebook tem suporte nativo a zstd, assim como o ClickHouse, um popular banco de dados analítico onde o zstd é um codec recomendado. O PostgreSQL 15 até adicionou suporte a zstd para suas mensagens de replicação lógica. **Downloads de grandes conjuntos de dados.** Vá para Hugging Face ou outros arquivos acadêmicos, e você encontrará muitos conjuntos de dados de aprendizado de máquina agora distribuídos como arquivos .zst ou .tar.zst. Até mesmo o conjunto de dados Common Crawl, historicamente famoso por seus arquivos .warc.gz, está vendo mais exportações .zst. **Ativos de jogos e distribuição de software.** A Mozilla usa zstd para entregar atualizações do Firefox de forma mais eficiente, e alguns motores de jogos o utilizam internamente para streaming rápido de ativos durante o jogo. A boa notícia é que, para a maioria desses cenários, você não precisa fazer nada de especial. Se você precisar apenas abrir ou extrair o arquivo, as ferramentas modernas do seu sistema, como o 7-Zip (versão 19.00 e posterior suporta .zst), o farão automaticamente.
Abrindo e Convertendo Arquivos .zst Sem a Linha de Comando
Sejamos honestos, nem todo mundo quer viver no terminal ou memorizar flags de compressão. Se você recebeu um arquivo .zst e só precisa extrair o conteúdo, você tem várias opções simples, dependendo do seu sistema operacional. **Windows:** O 7-Zip é seu melhor amigo aqui. Ele adicionou suporte completo a zstd na versão 22.00 (lançada em julho de 2022). Basta clicar com o botão direito no arquivo .zst, navegar até '7-Zip > Extrair aqui' e pronto. Se não funcionar, você provavelmente tem uma versão mais antiga; atualizá-lo é tudo o que você precisa fazer. **macOS:** O utilitário de arquivamento integrado não consegue lidar com .zst ainda (até o macOS Sequoia), mas o excelente e gratuito arquivador Keka faz isso perfeitamente. Alternativamente, se você usa Homebrew, um rápido `brew install zstd` seguido por `zstd -d file.zst` no Terminal resolve o problema. **Linux:** Você está quase certamente coberto. A ferramenta de linha de comando `zstd` provavelmente já está instalada ou está disponível no seu gerenciador de pacotes. Para descompactar, basta executar `zstd -d file.zst`. Para um arquivo tar, `tar --use-compress-program=zstd -xf file.tar.zst` é o comando clássico, embora muitos sistemas modernos também suportem o mais simples `tar -I zstd -xf file.tar.zst`. **Conversão baseada em navegador:** É aqui que uma ferramenta como o CocoConvert brilha. Se você precisar descompactar um arquivo .zst sem instalar nenhum software, pode fazer o upload para o CocoConvert e extrair seu conteúdo diretamente no seu navegador. Isso é ideal para arquivos .zst de stream único de tamanho razoável. Para arquivos .tar.zst massivos de vários gigabytes ou arquivos que dependem de um dicionário personalizado, uma ferramenta local será mais prática. O CocoConvert é transparente sobre isso: ele foi construído para lidar brilhantemente com os casos comuns, não com todos os casos extremos possíveis.
Criando Arquivos .zst: Quando Faz Sentido e Quando Não Faz
Zstandard é uma escolha fantástica quando você está compactando arquivos para públicos específicos: desenvolvedores, administradores de sistema ou sistemas automatizados que já o suportam. É perfeito para arquivos internos, distribuição de software ou transferência de dados onde a descompressão rápida na outra ponta é uma prioridade. Mas é absolutamente a escolha errada se você estiver enviando um arquivo para uma pessoa não técnica que o abrirá em uma máquina Windows padrão. Para essa tarefa, o Zip ainda é o rei. Todo sistema operacional moderno lida com arquivos .zip de fábrica, sem perguntas, sem software extra necessário. Embora o zstd esteja ganhando terreno, ele ainda não chegou lá para o compartilhamento casual de arquivos. Mantenha o que funciona. Para arquivar seus próprios arquivos, no entanto, a história é diferente. Usar o zstd em um nível mais alto (como -9) é um compromisso brilhante. Qualquer um que já ficou olhando para uma tela esperando uma pasta de 10 GB compactar com xz conhece a dor — pode levar de 8 a 12 minutos. A mesma pasta pode levar apenas 90 segundos com `zstd -9`, resultando em um arquivo apenas ligeiramente maior. Esse é um trade-off que eu aceitaria a qualquer dia. Para criar um arquivo .zst com o CocoConvert, você pode fazer o upload do seu arquivo de origem e escolher .zst como formato de saída. O nível de compressão padrão será bom para quase tudo. Lembre-se de que o CocoConvert compacta arquivos individuais. Se você quiser agrupar uma pasta inteira em um único arquivo .tar.zst, precisará criar o arquivo .tar primeiro em sua máquina e depois compactá-lo, ou usar um comando local como `tar -I zstd -cf output.tar.zst folder/`.
O Resumo Honesto: Vale a Pena Aprender Zstandard?
Sejamos claros: Zstandard não é um formato de nicho que pode desaparecer. Ele está profundamente embutido no kernel Linux, usado por grandes bancos de dados e adotado por gerenciadores de pacotes para enormes distribuições Linux. Com o apoio da Meta e uma comunidade de código aberto próspera, além da padronização oficial RFC, ele tem garantia de ser uma parte estável e de longo prazo do ecossistema de software. Para desenvolvedores e sysadmins, aprender a usar o zstd está se tornando uma habilidade básica. Compreender as compensações entre os níveis de compressão, saber quando um dicionário pode te salvar e entender a relação entre .zst e .tar.zst economizará diretamente tempo e recursos ao gerenciar infraestrutura moderna. Para usuários comuns, a conclusão é muito mais simples. Se você vir um arquivo .zst, você sabe o que é: um arquivo compactado. Não é um vídeo ou um documento estranho, apenas um contêiner. E você sabe que tem maneiras fáceis de abri-lo, seja atualizando o 7-Zip no Windows, pegando o Keka para macOS ou usando uma ferramenta web como o CocoConvert. Mas o zstd não conquistou tudo. Sua única fraqueza restante é o compartilhamento casual de arquivos, de pessoa para pessoa. Até que o Windows e o macOS possam abrir arquivos .zst apenas clicando duas vezes neles, da mesma forma que fazem com .zip, ele permanecerá um formato que exige um pouco de esforço extra do destinatário. Para quase todo o resto — cargas de trabalho de servidor, distribuição de software, compressão de banco de dados e arquivamento em larga escala — o zstd já venceu. É o novo padrão sensato, e por excelentes razões.