13 points par xguru 2025-01-20 | 4 commentaires | Partager sur WhatsApp
  • 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

 
wedding 2025-01-21

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.

 
ifmkl 2025-01-20

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 ?

 
cichol 2025-01-20

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.

 
ifmkl 2025-01-21

Ah, je vois. Merci pour votre réponse.