13 pontos por xguru 2025-01-20 | 4 comentários | Compartilhar no WhatsApp
  • 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

 
wedding 2025-01-21

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.

 
ifmkl 2025-01-20

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?

 
cichol 2025-01-20

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.

 
ifmkl 2025-01-21

Ah, entendi. Obrigado pela resposta.