- Un format de sérialisation binaire efficace
- Permet l’échange de données entre plusieurs langages, comme JSON
- Les petits entiers sont encodés sur un seul octet, et les chaînes courtes ne nécessitent qu’un octet supplémentaire en plus de la chaîne elle-même
- Pris en charge dans plus de 50 langages et environnements de programmation
- Cas d’usage :
- Redis : utilise une extension C MessagePack pour Lua pour la sérialisation des données
- Fluentd : utilise MessagePack pour la représentation interne des données, ce qui permet un traitement à haute vitesse
- Treasure Data : a construit une base de données multi-tenant optimisée pour les requêtes analytiques
- Pinterest : compresse le cache des flux avec MessagePack et Memcache pour un traitement rapide
Deux concepts : "Type System" et "Format"
- Système de types
- Integer : entier
- Nil : valeur
null
- Boolean :
true ou false
- Float : nombre à virgule flottante IEEE 754
- Raw : chaîne ou tableau d’octets
- Array : tableau d’objets
- Map : paires clé-valeur
- Extension : type défini par l’utilisateur
- Timestamp : information temporelle
- Format
- positive fixint, negative fixint, fixmap, fixarray
- nil, false, true
- bin 8/16/32, ext 8/16/32, float 32/64
- uint 8/16/32/64, int 8/16/32/64, fixext 1/2/4/8/16, str 8/16/32
- array 16/32, map 16/32
- Exemples de format
fixint : entier sur 7 bits (positif : 0x00–0x7F, négatif : 0xE0–0xFF)
fixstr : chaîne de 31 octets maximum
array 16 : tableau contenant jusqu’à (2^16)-1 éléments
map 16 : jusqu’à (2^16)-1 paires clé-valeur
Avantages de MessagePack
- Taille des données réduite au minimum et vitesse optimisée
- Remplacement et amélioration possibles pour les applications existantes basées sur JSON
- Mise en œuvre simple, permettant une utilisation souple dans divers environnements
4 commentaires
J’ai essayé d’utiliser MessagePack pour communiquer avec un serveur de jeu, mais la flexibilité dans des environnements variés, comme le promet la description, ne fonctionnait pas très bien. J’ai donc utilisé protobuf.
C’est peut-être parce que je ne connais pas très bien le sujet, mais… si on va sérialiser en hex à la place de JSON pour gagner en taille et en vitesse, en quoi est-ce différent de l’époque où on utilisait simplement la sérialisation binaire ?
Si on sort simplement quelque chose en binaire, cela n’est valable en général que dans le langage et l’environnement d’exécution qui l’ont produit ; des formats comme celui-là sont, eux, conçus en partant du principe qu’ils seront échangés entre différents langages et différents environnements.
Ah, je vois. Merci pour votre réponse.