Compression JSONL : gzip vs zstd vs Brotli

Un guide pratique pour compresser les fichiers JSONL. Comparez les taux de compression, les benchmarks de vitesse et decouvrez quand utiliser gzip, zstd ou Brotli pour vos pipelines de donnees, le stockage cloud et la diffusion web.

Derniere mise a jour : fevrier 2026

Pourquoi compresser les fichiers JSONL ?

Les fichiers JSONL grossissent vite. Une seule journee de journaux d'application peut produire des gigaoctets de JSON delimitee par lignes, et les jeux de donnees d'apprentissage automatique atteignent regulierement des dizaines de gigaoctets. Sans compression, vous payez plus pour le stockage, les transferts prennent plus de temps et les E/S deviennent le goulot d'etranglement de votre pipeline de donnees. La compression n'est pas optionnelle a grande echelle — c'est un element fondamental pour travailler efficacement avec les donnees JSONL.

La bonne nouvelle est que JSONL se compresse exceptionnellement bien. Comme JSON est un texte repetitif avec des cles recurrentes, des delimiteurs et des modeles structurels, les algorithmes de compression peuvent exploiter cette redondance pour atteindre une reduction de taille de 5x a 15x. Le defi est de choisir le bon algorithme pour votre cas d'utilisation : gzip offre une compatibilite universelle, zstd fournit le meilleur rapport vitesse/ratio, et Brotli atteint la compression la plus elevee pour les ressources statiques. Ce guide compare les trois avec de vrais benchmarks, des exemples de code fonctionnels et des recommandations claires.

Apercu des algorithmes de compression

Trois algorithmes dominent le paysage de la compression JSONL. Chacun utilise des strategies differentes et est optimise pour des scenarios differents. Comprendre leurs compromis vous aide a faire le bon choix pour votre charge de travail specifique.

gzip (DEFLATE)

Universel

Le standard universel. gzip existe depuis 1992 et est supporte partout — chaque langage de programmation, chaque systeme d'exploitation, chaque fournisseur cloud et chaque navigateur web. Il utilise l'algorithme DEFLATE combinant LZ77 et le codage de Huffman. Bien que ni le plus rapide ni le plus efficace, son ubiquite en fait le choix sur par defaut quand la compatibilite compte le plus.

Zstandard (zstd)

Recommande

Developpe par Facebook en 2016, zstd est le cheval de bataille moderne de la compression de donnees. Il compresse et decompresse significativement plus vite que gzip tout en atteignant des ratios similaires ou meilleurs. Zstd supporte aussi la compression par dictionnaire, qui est particulierement puissante pour les fichiers JSONL ou chaque ligne partage la meme structure de cles. C'est le meilleur choix pour les pipelines de donnees et le traitement en temps reel.

Brotli

Meilleur ratio

Cree par Google, Brotli atteint les taux de compression les plus eleves parmi les trois, surtout aux niveaux de compression maximum. Il utilise une combinaison de LZ77, du codage de Huffman et d'un dictionnaire statique integre de contenu web courant. Brotli excelle a compresser du JSONL pour la diffusion HTTP et le stockage statique, mais sa vitesse de compression aux niveaux eleves est notablement plus lente que gzip ou zstd.

Comparaison directe

Le tableau suivant resume les differences cles entre gzip, zstd et Brotli selon les metriques les plus importantes lors de la compression de fichiers JSONL. Ce sont des caracteristiques generales aux parametres par defaut ; les performances reelles varient selon les donnees et le niveau de compression.

MetriquegzipzstdBrotli
Taux de compressionBon (5-8x)Tres bon (6-10x)Excellent (7-12x)
Vitesse de compressionModereeRapideLente a moderee
Vitesse de decompressionModereeTres rapideRapide
Utilisation CPUModereeFaible a modereeElevee (au niveau max)
Support navigateurTous les navigateursChrome 123+, Firefox 126+Tous les navigateurs modernes
Support streamingOui (natif)Oui (natif)Limite

Resultats de benchmarks : fichier JSONL de 100 Mo

Pour donner des chiffres concrets, voici les resultats de benchmarks pour la compression d'un fichier JSONL de 100 Mo contenant des enregistrements de journaux d'application. Chaque enregistrement a 12 champs incluant des horodatages, des niveaux de log, des chaines de message et des objets de metadonnees imbriques. Les tests ont ete effectues sur un AMD Ryzen 7 avec 32 Go de RAM et un stockage NVMe.

Algorithme et niveauTaille compresseeRatioTemps de compressionTemps de decompression
gzip (niveau 6)14,2 Mo7,0x2,8s0,9s
gzip (niveau 9)13,1 Mo7,6x8,4s0,9s
zstd (niveau 3)12,8 Mo7,8x0,6s0,3s
zstd (niveau 1)15,1 Mo6,6x0,3s0,3s
Brotli (niveau 6)11,5 Mo8,7x3,2s0,5s
Brotli (niveau 11)9,8 Mo10,2x42,1s0,4s

Les benchmarks sont representatifs de donnees de journaux JSONL typiques. Les resultats varient selon la cardinalite des champs, l'entropie des valeurs et la structure des enregistrements. Les fichiers avec des cles hautement repetitives et des valeurs a faible entropie (comme les niveaux de log ou les codes de statut) se compressent mieux que ceux avec des chaines uniques a haute entropie.

Exemples de code de compression

Voici des exemples pratiques pour compresser et decompresser des fichiers JSONL en Python, Node.js et depuis la ligne de commande. Chaque exemple montre comment travailler avec les trois algorithmes.

Python dispose du support gzip integre. Pour zstd et Brotli, installez les packages pyzstd et brotli. Les trois suivent le meme modele : ouvrez un descripteur de fichier compresse, puis lisez ou ecrivez des lignes JSONL a travers.

Python : gzip, zstd et Brotli
import gzip
import json
# === gzip (integre) ===
# Ecrire du JSONL compresse
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')
# Lire du JSONL compresse
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
# Ecrire du JSONL compresse
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')
# Lire du JSONL compresse
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
# Compresser un fichier JSONL entier
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)
# Decompresser
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 inclut le support integre pour gzip et Brotli via le module zlib. Pour zstd, utilisez le package npm @aspect-build/zstd ou fzstd. L'API basee sur les streams est ideale pour traiter de gros fichiers JSONL sans les charger entierement en memoire.

Node.js : zlib gzip et Brotli
import { createReadStream, createWriteStream } from 'fs';
import { createGzip, createGunzip, createBrotliCompress,
createBrotliDecompress } from 'zlib';
import { createInterface } from 'readline';
import { pipeline } from 'stream/promises';
// === compression gzip ===
await pipeline(
createReadStream('data.jsonl'),
createGzip({ level: 6 }),
createWriteStream('data.jsonl.gz')
);
// === decompression gzip et analyse ===
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);
// traiter l'enregistrement
}
}
// === compression Brotli ===
await pipeline(
createReadStream('data.jsonl'),
createBrotliCompress(),
createWriteStream('data.jsonl.br')
);
// === decompression Brotli et analyse ===
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);
}
}

Les outils en ligne de commande sont le moyen le plus rapide de compresser des fichiers JSONL. gzip est pre-installe sur tous les systemes Unix. Installez zstd et brotli via votre gestionnaire de paquets pour les deux autres algorithmes.

Ligne de commande : gzip, zstd et Brotli
# === gzip ===
# Compresser (garde l'original par defaut avec -k)
gzip -k data.jsonl # -> data.jsonl.gz
gzip -9 -k data.jsonl # compression maximale
# Decompresser
gzip -d data.jsonl.gz
# ou : gunzip data.jsonl.gz
# === zstd ===
# Installer : brew install zstd / apt install zstd
zstd data.jsonl # -> data.jsonl.zst
zstd -3 data.jsonl # niveau 3 (defaut)
zstd --fast data.jsonl # compression la plus rapide
# Decompresser
zstd -d data.jsonl.zst
# ou : unzstd data.jsonl.zst
# === Brotli ===
# Installer : brew install brotli / apt install brotli
brotli data.jsonl # -> data.jsonl.br
brotli -q 6 data.jsonl # qualite 6
brotli -q 11 data.jsonl # compression maximale
# Decompresser
brotli -d data.jsonl.br
# === Piping avec jq ===
# Compresser du JSONL filtre
cat data.jsonl | jq -c 'select(.level == "error")' | gzip > errors.jsonl.gz
# Decompresser et compter les lignes
zstd -dc data.jsonl.zst | wc -l

Strategies de compression pour le stockage cloud

Lors du stockage de fichiers JSONL dans le stockage objet cloud, la compression reduit a la fois les couts de stockage et le temps de transfert. La plupart des fournisseurs cloud supportent la decompression transparente pour gzip et Brotli via leurs couches CDN, mais les strategies de telechargement et de stockage different.

Telechargez du JSONL compresse vers S3 avec le bon en-tete Content-Encoding. S3 stocke les octets compresses, et CloudFront peut les servir avec decompression automatique. Pour les charges de travail de lac de donnees, des outils comme AWS Athena et Spark lisent nativement le JSONL compresse en gzip et zstd.

AWS S3 avec compression
guide-jsonl-compression.jsonlCompression.cloudStorage.s3.code

Google Cloud Storage supporte le transcodage gzip. Quand vous telechargez un objet compresse en gzip avec l'en-tete Content-Encoding: gzip, GCS peut servir la version decompressee automatiquement quand les clients envoient Accept-Encoding: gzip. Pour les imports BigQuery, utilisez directement du JSONL compresse en gzip.

Google Cloud Storage avec compression
from google.cloud import storage
import gzip
import json
client = storage.Client()
bucket = client.bucket('my-data-bucket')
# Telecharger du JSONL compresse en 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 : charger du JSONL compresse directement
# bq load --source_format=NEWLINE_DELIMITED_JSON \
# my_dataset.my_table gs://bucket/data.jsonl.gz schema.json

Bonnes pratiques : quel algorithme utiliser et quand

Il n'y a pas un seul meilleur algorithme de compression. Le bon choix depend de votre priorite : taille de stockage, vitesse de traitement, compatibilite ou un equilibre des trois. Voici des recommandations claires pour les cas d'utilisation courants du JSONL.

Archivage et stockage froid

Utilisez Brotli (qualite 9-11) ou zstd (niveau 19+) pour une compression maximale.

Le temps de compression compte moins pour l'archivage. Vous compressez une fois et decompressez rarement. Brotli a la qualite 11 peut atteindre une compression de 10x+ sur les donnees JSONL, reduisant significativement les couts de stockage a long terme.

Pipelines de donnees en temps reel

Utilisez zstd (niveau 1-3) pour le meilleur rapport vitesse/ratio.

Dans les pipelines de streaming (Kafka, Kinesis, Flink), la vitesse de compression et de decompression affecte directement le debit et la latence. Zstd au niveau 1 compresse plus vite que gzip tout en atteignant de meilleurs ratios. Son mode dictionnaire est ideal pour le JSONL avec des schemas fixes.

Diffusion web et API

Utilisez Brotli pour les fichiers statiques, gzip comme solution de repli pour une compatibilite maximale.

Tous les navigateurs modernes supportent Brotli via Accept-Encoding: br. Les CDN comme Cloudflare et CloudFront peuvent compresser automatiquement avec Brotli. Utilisez gzip comme solution de repli pour les clients plus anciens. Le support de zstd par les navigateurs croit mais n'est pas encore universel.

ETL et traitement par lots

Utilisez gzip pour une compatibilite maximale, ou zstd pour de meilleures performances.

La plupart des outils de donnees (Spark, Athena, BigQuery, pandas) supportent gzip nativement. Le support de zstd s'ameliore rapidement. Si votre chaine d'outils supporte zstd, preferez-le pour une compression 3 a 5 fois plus rapide avec des ratios comparables.

Essayez nos outils JSONL gratuits

Compressez vos fichiers JSONL avant de les telecharger, ou validez-les et convertissez-les en utilisant nos outils en ligne gratuits. Aucune installation requise.

Travaillez avec des fichiers JSONL en ligne

Visualisez, validez et convertissez des fichiers JSONL jusqu'a 1 Go directement dans votre navigateur. Sans telechargement, 100% prive.

Questions frequemment posees

Compression JSONL — gzip vs zstd vs Brotli (benchmarks) |...