- 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
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.
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?
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.
Ah, ya veo. Gracias por la respuesta.