- Formato eficiente de serialização binária
- Permite troca de dados entre várias linguagens, como o JSON
- Inteiros pequenos são codificados em um único byte, e strings curtas precisam de apenas um byte adicional além da própria string
- Suportado em mais de 50 linguagens de programação e ambientes
- Casos de uso:
- Redis: utiliza serialização de dados ao adicionar a extensão C do MessagePack para Lua
- Fluentd: usa MessagePack para representação interna de dados, permitindo processamento em alta velocidade
- Treasure Data: construiu um banco de dados multitenant otimizado para consultas analíticas
- Pinterest: usa MessagePack e Memcache para compactação do cache de feed e processamento rápido
Dois conceitos: "Type System" e "Format"
- Sistema de tipos
- Integer: inteiro
- Nil: valor
null
- Boolean:
true ou false
- Float: ponto flutuante IEEE 754
- Raw: string ou array de bytes
- Array: array de objetos
- Map: pares chave-valor
- Extension: tipo definido pelo usuário
- Timestamp: informação de tempo
- 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
- Exemplos de formato
fixint: inteiro de 7 bits (positivo: 0x00–0x7F, negativo: 0xE0–0xFF)
fixstr: string de até 31 bytes
array 16: array com até (2^16)-1 elementos
map 16: até (2^16)-1 pares chave-valor
Vantagens do MessagePack
- Minimiza o tamanho dos dados e otimiza a velocidade
- Pode substituir e melhorar aplicações existentes baseadas em JSON
- Implementação simples, com uso flexível em vários ambientes
4 comentários
Quando tentei aplicar o MessagePack para me comunicar com o servidor do jogo... aquela flexibilidade em vários ambientes, como a descrição promete, não funcionou tão bem. Então usei protobuf.
Talvez seja porque eu não entenda muito bem, mas... se vão serializar em hex em vez de JSON por causa de tamanho e velocidade... no fim, o que isso tem de diferente da época em que simplesmente se usava serialização binária?
Se você simplesmente exportar em binário, isso só costuma valer na linguagem e no runtime que o geraram, mas formatos como esse geralmente são feitos supondo a troca de dados entre linguagens e ambientes diferentes.
Ah, entendi. Obrigado pela resposta.