Compressão JSONL: gzip vs zstd vs Brotli

Um guia prático para comprimir arquivos JSONL. Compare taxas de compressão, benchmarks de velocidade e aprenda quando usar gzip, zstd ou Brotli para seus pipelines de dados, armazenamento em nuvem e entrega web.

Última atualização: fevereiro de 2026

Por que Comprimir Arquivos JSONL?

Arquivos JSONL crescem rápido. Um único dia de logs de aplicação pode produzir gigabytes de JSON delimitado por linhas, e datasets de machine learning rotineiramente alcançam dezenas de gigabytes. Sem compressão, você paga mais por armazenamento, transferências demoram mais e I/O se torna o gargalo no seu pipeline de dados. Compressão não é opcional em escala — é uma parte fundamental de trabalhar com dados JSONL de forma eficiente.

A boa notícia é que JSONL comprime excepcionalmente bem. Como JSON é texto repetitivo com chaves recorrentes, delimitadores e padrões estruturais, algoritmos de compressão podem explorar essa redundância para alcançar redução de 5x a 15x no tamanho. O desafio é escolher o algoritmo certo para seu caso de uso: gzip oferece compatibilidade universal, zstd entrega o melhor trade-off de velocidade-para-taxa, e Brotli alcança a maior compressão para ativos estáticos. Este guia compara todos os três com benchmarks reais, exemplos de código funcionais e recomendações claras.

Visão Geral dos Algoritmos de Compressão

Três algoritmos dominam o cenário de compressão JSONL. Cada um usa estratégias diferentes e é otimizado para cenários distintos. Entender seus trade-offs ajuda a fazer a escolha certa para sua carga de trabalho específica.

gzip (DEFLATE)

Universal

O padrão universal. gzip existe desde 1992 e é suportado em toda parte — toda linguagem de programação, todo sistema operacional, todo provedor de nuvem e todo navegador web. Ele usa o algoritmo DEFLATE combinando LZ77 e codificação Huffman. Embora não seja o mais rápido ou mais eficiente, sua ubiquidade o torna a escolha padrão segura quando compatibilidade é o que mais importa.

Zstandard (zstd)

Recomendado

Desenvolvido pelo Facebook em 2016, zstd é o cavalo de batalha moderno da compressão de dados. Ele comprime e descomprime significativamente mais rápido que gzip enquanto alcança taxas similares ou melhores. Zstd também suporta compressão com dicionário, que é especialmente poderosa para arquivos JSONL onde cada linha compartilha a mesma estrutura de chaves. É a melhor escolha para pipelines de dados e processamento em tempo real.

Brotli

Melhor Taxa

Criado pelo Google, Brotli alcança as maiores taxas de compressão entre os três, especialmente em níveis máximos de compressão. Ele usa uma combinação de LZ77, codificação Huffman e um dicionário estático integrado de conteúdo web comum. Brotli se destaca na compressão de JSONL para entrega HTTP e armazenamento estático, mas sua velocidade de compressão em níveis altos é notavelmente mais lenta que gzip ou zstd.

Comparação Direta

A tabela a seguir resume as principais diferenças entre gzip, zstd e Brotli nas métricas que mais importam ao comprimir arquivos JSONL. Estas são características gerais em configurações padrão; o desempenho real varia com os dados e nível de compressão.

MétricagzipzstdBrotli
Taxa de CompressãoBoa (5-8x)Muito Boa (6-10x)Excelente (7-12x)
Velocidade de CompressãoModeradaRápidaLenta a Moderada
Velocidade de DescompressãoModeradaMuito RápidaRápida
Uso de CPUModeradoBaixo a ModeradoAlto (no nível máximo)
Suporte em NavegadoresTodos os navegadoresChrome 123+, Firefox 126+Todos os navegadores modernos
Suporte a StreamingSim (nativo)Sim (nativo)Limitado

Resultados de Benchmark: Arquivo JSONL de 100 MB

Para fornecer números concretos, aqui estão resultados de benchmark da compressão de um arquivo JSONL de 100 MB contendo registros de log de aplicação. Cada registro tem 12 campos incluindo timestamps, níveis de log, strings de mensagem e objetos de metadados aninhados. Testes foram executados em um AMD Ryzen 7 com 32 GB RAM e armazenamento NVMe.

Algoritmo e NívelTamanho ComprimidoTaxaTempo de CompressãoTempo de Descompressão
gzip (nível 6)14,2 MB7,0x2,8s0,9s
gzip (nível 9)13,1 MB7,6x8,4s0,9s
zstd (nível 3)12,8 MB7,8x0,6s0,3s
zstd (nível 1)15,1 MB6,6x0,3s0,3s
Brotli (nível 6)11,5 MB8,7x3,2s0,5s
Brotli (nível 11)9,8 MB10,2x42,1s0,4s

Benchmarks são representativos de dados de log JSONL típicos. Resultados variam dependendo da cardinalidade dos campos, entropia dos valores e estrutura dos registros. Arquivos com chaves altamente repetitivas e valores de baixa entropia (como níveis de log ou códigos de status) comprimem melhor que aqueles com strings únicas de alta entropia.

Exemplos de Código para Compressão

Aqui estão exemplos práticos para comprimir e descomprimir arquivos JSONL em Python, Node.js e pela linha de comando. Cada exemplo mostra como trabalhar com todos os três algoritmos.

Python tem suporte gzip integrado. Para zstd e Brotli, instale os pacotes pyzstd e brotli. Todos os três seguem o mesmo padrão: abra um handle de arquivo comprimido, depois leia ou escreva linhas JSONL através dele.

Python: gzip, zstd e Brotli
import gzip
import json
# === gzip (integrado) ===
# Escreve JSONL comprimido
with gzip.open('data.jsonl.gz', 'wt', encoding='utf-8') as f:
for record in records:
f.write(json.dumps(record, ensure_ascii=False) + '\n')
# Lê JSONL comprimido
with gzip.open('data.jsonl.gz', 'rt', encoding='utf-8') as f:
for line in f:
record = json.loads(line)
# === zstd (pip install pyzstd) ===
import pyzstd
# Escreve JSONL comprimido
with pyzstd.open('data.jsonl.zst', 'wt', encoding='utf-8') as f:
for record in records:
f.write(json.dumps(record, ensure_ascii=False) + '\n')
# Lê JSONL comprimido
with pyzstd.open('data.jsonl.zst', 'rt', encoding='utf-8') as f:
for line in f:
record = json.loads(line)
# === Brotli (pip install brotli) ===
import brotli
# Comprime um arquivo JSONL inteiro
with open('data.jsonl', 'rb') as f:
raw = f.read()
compressed = brotli.compress(raw, quality=6)
with open('data.jsonl.br', 'wb') as f:
f.write(compressed)
# Descomprime
with open('data.jsonl.br', 'rb') as f:
raw = brotli.decompress(f.read())
for line in raw.decode('utf-8').splitlines():
record = json.loads(line)

Node.js inclui suporte integrado tanto para gzip quanto para Brotli através do módulo zlib. Para zstd, use o pacote npm @aspect-build/zstd ou fzstd. A API baseada em streams é ideal para processar arquivos JSONL grandes sem carregá-los inteiramente na memória.

Node.js: zlib gzip e Brotli
import { createReadStream, createWriteStream } from 'fs';
import { createGzip, createGunzip, createBrotliCompress,
createBrotliDecompress } from 'zlib';
import { createInterface } from 'readline';
import { pipeline } from 'stream/promises';
// === comprimir com gzip ===
await pipeline(
createReadStream('data.jsonl'),
createGzip({ level: 6 }),
createWriteStream('data.jsonl.gz')
);
// === descomprimir gzip e parsear ===
const gunzip = createGunzip();
const rl = createInterface({
input: createReadStream('data.jsonl.gz').pipe(gunzip),
});
for await (const line of rl) {
if (line.trim()) {
const record = JSON.parse(line);
// processa registro
}
}
// === comprimir com Brotli ===
await pipeline(
createReadStream('data.jsonl'),
createBrotliCompress(),
createWriteStream('data.jsonl.br')
);
// === descomprimir Brotli e parsear ===
const br = createBrotliDecompress();
const rl2 = createInterface({
input: createReadStream('data.jsonl.br').pipe(br),
});
for await (const line of rl2) {
if (line.trim()) {
const record = JSON.parse(line);
}
}

Ferramentas de linha de comando são a maneira mais rápida de comprimir arquivos JSONL. gzip vem pré-instalado em todos os sistemas Unix. Instale zstd e brotli via seu gerenciador de pacotes para os outros dois algoritmos.

Linha de Comando: gzip, zstd e Brotli
# === gzip ===
# Comprimir (mantém original por padrão com -k)
gzip -k data.jsonl # -> data.jsonl.gz
gzip -9 -k data.jsonl # compressão máxima
# Descomprimir
gzip -d data.jsonl.gz
# ou: gunzip data.jsonl.gz
# === zstd ===
# Instalar: brew install zstd / apt install zstd
zstd data.jsonl # -> data.jsonl.zst
zstd -3 data.jsonl # nível 3 (padrão)
zstd --fast data.jsonl # compressão mais rápida
# Descomprimir
zstd -d data.jsonl.zst
# ou: unzstd data.jsonl.zst
# === Brotli ===
# Instalar: brew install brotli / apt install brotli
brotli data.jsonl # -> data.jsonl.br
brotli -q 6 data.jsonl # qualidade 6
brotli -q 11 data.jsonl # compressão máxima
# Descomprimir
brotli -d data.jsonl.br
# === Piping com jq ===
# Comprimir JSONL filtrado
cat data.jsonl | jq -c 'select(.level == "error")' | gzip > errors.jsonl.gz
# Descomprimir e contar linhas
zstd -dc data.jsonl.zst | wc -l

Estratégias de Compressão para Armazenamento em Nuvem

Ao armazenar arquivos JSONL em armazenamento de objetos na nuvem, compressão reduz tanto custos de armazenamento quanto tempo de transferência. A maioria dos provedores de nuvem suporta descompressão transparente para gzip e Brotli através de suas camadas CDN, mas as estratégias de upload e armazenamento diferem.

Faça upload de JSONL comprimido para S3 com o header Content-Encoding correto. S3 armazena os bytes comprimidos, e CloudFront pode servi-los com descompressão automática. Para cargas de trabalho de data lake, ferramentas como AWS Athena e Spark leem nativamente JSONL comprimido com gzip e zstd.

AWS S3 com Compressão
guide-jsonl-compression.jsonlCompression.cloudStorage.s3.code

Google Cloud Storage suporta transcodificação gzip. Quando você faz upload de um objeto comprimido com gzip com o header Content-Encoding: gzip, GCS pode servir a versão descomprimida automaticamente quando clientes enviam Accept-Encoding: gzip. Para importações BigQuery, use JSONL comprimido com gzip diretamente.

Google Cloud Storage com Compressão
from google.cloud import storage
import gzip
import json
client = storage.Client()
bucket = client.bucket('my-data-bucket')
# Faz upload de JSONL comprimido com gzip
def upload_compressed(records, blob_name):
blob = bucket.blob(f{blob_name}.jsonl.gz)
blob.content_encoding = 'gzip'
blob.content_type = 'application/x-ndjson'
data = '\n'.join(
json.dumps(r, ensure_ascii=False) for r in records
).encode('utf-8')
blob.upload_from_string(
gzip.compress(data),
content_type='application/x-ndjson',
)
# BigQuery: carrega JSONL comprimido diretamente
# bq load --source_format=NEWLINE_DELIMITED_JSON \
# my_dataset.my_table gs://bucket/data.jsonl.gz schema.json

Boas Práticas: Quando Usar Qual Algoritmo

Não existe um único melhor algoritmo de compressão. A escolha certa depende de você priorizar tamanho de armazenamento, velocidade de processamento, compatibilidade ou um equilíbrio dos três. Aqui estão recomendações claras para casos de uso comuns de JSONL.

Arquivamento e Armazenamento Frio

Use Brotli (qualidade 9-11) ou zstd (nível 19+) para compressão máxima.

Tempo de compressão importa menos para arquivamento. Você comprime uma vez e descomprime raramente. Brotli na qualidade 11 pode alcançar compressão de 10x+ em dados JSONL, reduzindo significativamente os custos de armazenamento de longo prazo.

Pipelines de Dados em Tempo Real

Use zstd (nível 1-3) para o melhor trade-off de velocidade-para-taxa.

Em pipelines de streaming (Kafka, Kinesis, Flink), velocidade de compressão e descompressão afetam diretamente throughput e latência. Zstd no nível 1 comprime mais rápido que gzip enquanto alcança melhores taxas. Seu modo de dicionário é ideal para JSONL com schemas fixos.

Entrega Web e APIs

Use Brotli para arquivos estáticos, gzip como fallback para máxima compatibilidade.

Todos os navegadores modernos suportam Brotli via Accept-Encoding: br. CDNs como Cloudflare e CloudFront podem comprimir automaticamente com Brotli. Use gzip como fallback para clientes mais antigos. O suporte a zstd em navegadores está crescendo mas ainda não é universal.

ETL e Processamento em Lote

Use gzip para máxima compatibilidade, ou zstd para melhor desempenho.

A maioria das ferramentas de dados (Spark, Athena, BigQuery, pandas) suporta gzip nativamente. O suporte a zstd está melhorando rapidamente. Se sua cadeia de ferramentas suporta zstd, prefira-o para compressão 3-5x mais rápida com taxas comparáveis.

Experimente Nossas Ferramentas JSONL Gratuitas

Comprima seus arquivos JSONL antes de enviar, ou valide e converta-os usando nossas ferramentas online gratuitas. Sem instalação necessária.

Trabalhe com Arquivos JSONL Online

Visualize, valide e converta arquivos JSONL de até 1GB diretamente no seu navegador. Sem uploads necessários, 100% privado.

Perguntas Frequentes

Compressão JSONL — gzip vs zstd vs brotli (Benchmarks) | ...