13 puntos por xguru 2025-01-20 | 4 comentarios | Compartir por WhatsApp
  • Un formato eficiente de serialización binaria
  • Permite intercambiar datos entre distintos lenguajes, como JSON
  • Los enteros pequeños se codifican en un solo byte, y las cadenas cortas solo requieren un byte adicional además de la propia cadena
  • Compatible con más de 50 lenguajes y entornos de programación
  • Casos de uso:
    • Redis: aprovecha la extensión C de MessagePack para Lua en la serialización de datos
    • Fluentd: usa MessagePack para la representación interna de datos, lo que permite procesamiento de alta velocidad
    • Treasure Data: construyó una base de datos multi-tenant optimizada para consultas analíticas
    • Pinterest: usa MessagePack y Memcache para comprimir la caché del feed y procesarla rápidamente

Dos conceptos: "Type System" y "Format"

  • Sistema de tipos
    • Integer: entero
    • Nil: valor null
    • Boolean: true o false
    • Float: punto flotante IEEE 754
    • Raw: cadena o arreglo de bytes
    • Array: arreglo de objetos
    • Map: pares clave-valor
    • Extension: tipo definido por el usuario
      • Timestamp: información de tiempo
  • Formato
    • 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
    • Ejemplos de formato
      • fixint: entero de 7 bits (positivo: 0x00–0x7F, negativo: 0xE0–0xFF)
      • fixstr: cadena de hasta 31 bytes
      • array 16: arreglo con hasta (2^16)-1 elementos
      • map 16: hasta (2^16)-1 pares clave-valor

Ventajas de MessagePack

  • Minimiza el tamaño de los datos y optimiza la velocidad
  • Puede reemplazar y mejorar aplicaciones existentes basadas en JSON
  • Su implementación simple permite usarlo con flexibilidad en distintos entornos

4 comentarios

 
wedding 2025-01-21

Quise aplicar MessagePack al comunicarme con el servidor del juego, pero la flexibilidad en distintos entornos no funcionó tan bien como decía la explicación. Así que usé protobuf.

 
ifmkl 2025-01-20

Tal vez sea porque no lo tengo muy claro, pero... si van a serializar en hex en vez de JSON por tamaño y velocidad... ¿en qué se diferencia eso de cuando simplemente se usaba serialización binaria?

 
cichol 2025-01-20

Si simplemente lo generas en binario, solo es válido en el lenguaje y el runtime que lo produjo, pero ese tipo de formatos por lo general se crean asumiendo que se van a intercambiar entre distintos lenguajes y entornos.

 
ifmkl 2025-01-21

Ah, ya veo. Gracias por la respuesta.