Qu'est-ce que Zstandard (zst) ? L'algorithme de compression de Facebook
En bref : Ce qu'est réellement Zstandard
Zstandard — souvent abrégé en zstd avec une extension de fichier .zst — est un algorithme de compression de données sans perte créé par Yann Collet chez Facebook (désormais Meta). Il a été publié en open source en 2016 et a rapidement trouvé sa place ; le noyau Linux l'a adopté dans sa version 5.16. Facebook lui-même s'appuie sur zstd pour toute son immense infrastructure, compressant tout, des instantanés de bases de données aux fichiers journaux. Le format est désormais une norme Internet officielle, entièrement documentée dans le RFC 8878. Sous le capot, zstd combine une approche LZ77 basée sur un dictionnaire avec un codeur entropique moderne appelé Asymmetric Numeral Systems (ANS). En pratique, cela signifie qu'il compresse et décompresse les données à des vitesses incroyables, souvent sans sacrifier beaucoup de taux de compression par rapport aux algorithmes plus lents et plus traditionnels. L'extension .zst désigne le format compressé à flux unique. Tu verras également .tar.zst, qui est simplement une archive tar compressée avec zstd, tout comme les familiers .tar.gz ou .tar.bz2. Si tu as récemment téléchargé un paquet Linux, une sauvegarde de base de données ou un grand ensemble de données, il y a de fortes chances que ce soit un fichier .zst ou .tar.zst.
Comment Zstandard se compare à gzip, bzip2 et xz
Lorsque tu choisis un outil de compression, tu jongles toujours avec trois facteurs : la taille du fichier de sortie (taux de compression), la vitesse de compression et la vitesse de décompression. Zstandard a été conçu dès le départ pour surpasser le vénérable gzip sur les trois fronts à la fois — une affirmation qui semble trop belle pour être vraie, mais qui se vérifie en grande partie. Les propres benchmarks de Facebook sur le corpus Silesia, une suite de tests standard, montrent que zstd, à son niveau par défaut (niveau 3), atteint un ratio de 2,884x avec une vitesse de compression fulgurante de 500 Mo/s et plus de 1 600 Mo/s en décompression. À titre de comparaison, le niveau par défaut de gzip obtient un ratio de 2,743x avec environ 130 Mo/s en compression et 400 Mo/s en décompression. Les chiffres ne mentent pas : zstd est plus rapide dans les deux sens et compresse les fichiers un peu plus fort par défaut. D'autres outils comme bzip2 peuvent atteindre un meilleur ratio (environ 3,0x), mais à une vitesse d'escargot, souvent inférieure à 20 Mo/s pour la compression. Et bien que xz pousse les ratios au-delà de 3,2x, sa vitesse de compression inférieure à 10 Mo/s en fait un non-sens pour tout ce qui est sensible au temps. La véritable puissance de Zstd vient de ses 22 niveaux de compression. Le niveau 1 est tout est une question de vitesse, parfait pour compresser le trafic réseau en temps réel. À l'autre extrémité, les niveaux 19 à 22 (les modes « ultra ») rivalisent avec le taux de compression de xz tout en décompressant un ordre de grandeur plus vite. La plupart des gens s'en tiennent à la plage 3-9. Sur Linux, tu peux facilement contrôler cela : `zstd -9 myfile.tar` prendra plus de temps CPU mais produira un fichier plus petit que la commande par défaut `zstd -3 myfile.tar`.
L'entraînement par dictionnaire : la fonctionnalité que la plupart des gens ignorent
La compression par dictionnaire est l'une des fonctionnalités les plus puissantes — et les plus sous-estimées — de zstd. Les algorithmes de compression standard fonctionnent en trouvant des motifs répétitifs à l'intérieur d'un seul fichier. Mais que se passe-t-il si le fichier est minuscule, comme une charge utile JSON de 2 Ko ? Il n'y a tout simplement pas assez de données pour que l'algorithme construise un modèle utile de ce qui est répété, de sorte que le taux de compression est souvent terrible. Dans certains cas, le fichier « compressé » peut même finir par être plus grand que l'original. L'entraînement par dictionnaire est la solution. Tu peux fournir à zstd un grand échantillon de tes données — par exemple, des milliers de petits fichiers journaux ou d'objets JSON similaires — et il générera un seul fichier dictionnaire qui capture tous leurs motifs communs. Ensuite, le compresseur et le décompresseur utilisent ce dictionnaire partagé comme point de départ. Facebook a rapporté avoir atteint une compression 6x sur de petits objets JSON qui, autrement, ne se compressaient presque pas du tout en utilisant cette même technique. Pour l'essayer toi-même depuis la ligne de commande, tu commences par entraîner un dictionnaire : `zstd --train /path/to/samples/* -o mydict.zst-dict`. Ensuite, tu l'utilises pour compresser un fichier : `zstd -D mydict.zst-dict smallfile.json`. Le seul inconvénient est que le décompresseur a également besoin de ce même fichier dictionnaire. Cela en fait un défi opérationnel ; tu dois stocker et distribuer le dictionnaire avec tes données. Alors, qui utilise réellement cela ? C'est un véritable atout pour les ingénieurs de bases de données, les développeurs backend compressant les réponses d'API, et quiconque gérant d'énormes volumes de petits fichiers structurellement similaires. Pour l'utilisateur moyen qui compresse simplement un dossier, zstd standard est plus que suffisant.
Où tu rencontres réellement des fichiers .zst
Tu as probablement déjà utilisé zstd sans même t'en rendre compte. L'algorithme s'est répandu bien au-delà des serveurs de Facebook et est désormais une partie essentielle du paysage logiciel moderne. Voici quelques endroits concrets où tu trouveras des fichiers .zst dans la nature : **Gestionnaires de paquets Linux.** Arch Linux est passé de .tar.xz à .tar.zst en 2020, citant des améliorations massives de la vitesse d'installation des paquets. Fedora a depuis emboîté le pas. Lorsque tu exécutes `pacman -S` ou `dnf install`, tu télécharges et décompresses des fichiers compressés .zst. **Le noyau Linux lui-même.** Depuis la version 5.16, l'image du noyau (bzImage) et l'initramfs peuvent être compressés avec zstd. Certaines distributions livrent désormais des noyaux compressés avec zstd par défaut pour un temps de démarrage visiblement plus rapide. **Systèmes de bases de données et de stockage.** RocksDB de Facebook a un support zstd natif, tout comme ClickHouse, une base de données analytique populaire où zstd est un codec recommandé. PostgreSQL 15 a même ajouté le support zstd pour ses messages de réplication logique. **Téléchargements de grands ensembles de données.** Rends-toi sur Hugging Face ou d'autres archives académiques, et tu trouveras de nombreux ensembles de données d'apprentissage automatique désormais distribués sous forme de fichiers .zst ou .tar.zst. Même le jeu de données Common Crawl, historiquement célèbre pour ses fichiers .warc.gz, voit de plus en plus d'exports .zst. **Assets de jeux et distribution de logiciels.** Mozilla utilise zstd pour livrer les mises à jour de Firefox plus efficacement, et certains moteurs de jeux l'utilisent en interne pour un streaming rapide des assets pendant le jeu. La bonne nouvelle est que pour la plupart de ces scénarios, tu n'as rien de spécial à faire. Si tu as juste besoin d'ouvrir ou d'extraire le fichier, les outils modernes de ton système, comme 7-Zip (la version 19.00 et ultérieure supporte les .zst), le géreront automatiquement.
Ouvrir et convertir des fichiers .zst sans la ligne de commande
Soyons honnêtes, tout le monde ne veut pas vivre dans le terminal ou mémoriser des drapeaux de compression. Si on t'a envoyé un fichier .zst et que tu as juste besoin d'en extraire le contenu, tu as plusieurs options simples selon ton système d'exploitation. **Windows :** 7-Zip est ton meilleur ami ici. Il a ajouté le support complet de zstd dans la version 22.00 (publiée en juillet 2022). Il suffit de faire un clic droit sur le fichier .zst, de naviguer vers '7-Zip > Extraire ici', et le tour est joué. Si cela ne fonctionne pas, tu as probablement une version plus ancienne ; la mettre à jour est tout ce que tu dois faire. **macOS :** L'Utilitaire d'archive intégré ne peut pas encore gérer les .zst (à partir de macOS Sequoia), mais l'excellent et gratuit archiveur Keka le fait parfaitement. Alternativement, si tu utilises Homebrew, une rapide `brew install zstd` suivie de `zstd -d file.zst` dans le Terminal fait l'affaire. **Linux :** Tu es presque certainement couvert. L'outil en ligne de commande `zstd` est probablement déjà installé ou est disponible dans ton gestionnaire de paquets. Pour décompresser, il suffit d'exécuter `zstd -d file.zst`. Pour une archive tar, `tar --use-compress-program=zstd -xf file.tar.zst` est la commande classique, bien que de nombreux systèmes modernes supportent également la plus simple `tar -I zstd -xf file.tar.zst`. **Conversion basée sur le navigateur :** C'est là qu'un outil comme CocoConvert brille. Si tu as besoin de décompresser un fichier .zst sans installer de logiciel, tu peux le télécharger sur CocoConvert et en extraire le contenu directement dans ton navigateur. C'est idéal pour les fichiers .zst à flux unique de taille raisonnable. Pour les archives .tar.zst massives de plusieurs gigaoctets ou les fichiers qui dépendent d'un dictionnaire personnalisé, un outil local sera plus pratique. CocoConvert est transparent à ce sujet : il est conçu pour gérer brillamment les cas courants, pas toutes les exceptions possibles.
Créer des fichiers .zst : quand cela a du sens et quand cela n'en a pas
Zstandard est un excellent choix lorsque tu compresses des fichiers pour des publics spécifiques : développeurs, administrateurs système, ou des systèmes automatisés qui le supportent déjà. C'est parfait pour les archives internes, distribuer des logiciels, ou transférer des données où une décompression rapide à l'autre bout est une priorité. Mais c'est absolument le mauvais choix si tu envoies un fichier à une personne non technique qui l'ouvrira sur une machine Windows standard. Pour ce travail, Zip est toujours roi. Chaque système d'exploitation moderne gère les fichiers .zip directement, sans poser de questions, sans logiciel supplémentaire. Bien que zstd gagne du terrain, il n'en est tout simplement pas encore là pour le partage de fichiers occasionnel. Tiens-toi à ce qui fonctionne. Pour archiver tes propres fichiers, cependant, l'histoire est différente. Utiliser zstd à un niveau plus élevé (comme -9) est un compromis brillant. Quiconque a déjà fixé un écran en attendant qu'un dossier de 10 Go se compresse avec xz connaît la douleur — cela peut prendre 8 à 12 minutes. Le même dossier pourrait prendre seulement 90 secondes avec `zstd -9`, résultant en un fichier qui n'est que légèrement plus grand. C'est un compromis que j'accepterais n'importe quel jour. Pour créer un fichier .zst avec CocoConvert, tu peux télécharger ton fichier source et choisir .zst comme format de sortie. Le niveau de compression par défaut conviendra à presque tout. Garde à l'esprit que CocoConvert compresse des fichiers individuels. Si tu veux regrouper un dossier entier dans une seule archive .tar.zst, tu devras d'abord créer le fichier .tar sur ta machine, puis le compresser, ou utiliser une commande locale comme `tar -I zstd -cf output.tar.zst folder/`.
Le résumé honnête : Zstandard vaut-il la peine d'être appris ?
Soyons clairs : Zstandard n'est pas un format de niche qui pourrait disparaître. Il est profondément intégré au noyau Linux, utilisé par les principales bases de données, et adopté par les gestionnaires de paquets pour d'énormes distributions Linux. Avec le soutien de Meta et une communauté open-source florissante, ainsi qu'une standardisation RFC officielle, il est garanti d'être une partie stable et à long terme de l'écosystème logiciel. Pour les développeurs et les administrateurs système, apprendre à utiliser zstd devient une compétence de base. Comprendre les compromis entre les niveaux de compression, savoir quand un dictionnaire peut te sauver, et saisir la relation entre .zst et .tar.zst te fera directement économiser du temps et des ressources lorsque tu gères une infrastructure moderne. Pour les utilisateurs quotidiens, le principal à retenir est bien plus simple. Si tu vois un fichier .zst, tu sais ce que c'est : une archive compressée. Ce n'est pas une vidéo ou un document étrange, juste un conteneur. Et tu sais que tu as des moyens faciles de l'ouvrir, que ce soit en mettant à jour 7-Zip sur Windows, en téléchargeant Keka pour macOS, ou en utilisant un outil web comme CocoConvert. Mais zstd n'a pas tout conquis. Sa seule faiblesse restante est le partage de fichiers occasionnel, de personne à personne. Tant que Windows et macOS ne pourront pas ouvrir les fichiers .zst en double-cliquant simplement dessus, comme ils le font avec les .zip, il restera un format qui demande un petit effort supplémentaire de la part du destinataire. Pour presque tout le reste — les charges de travail des serveurs, la distribution de logiciels, la compression de bases de données et l'archivage à grande échelle — zstd a déjà gagné. C'est le nouveau standard par défaut sensé, et pour de très bonnes raisons.