13 Punkte von xguru 2025-01-20 | 4 Kommentare | Auf WhatsApp teilen
  • Ein effizientes Binary-Serialization-Format
  • Wie JSON für den Datenaustausch zwischen verschiedenen Sprachen geeignet
  • Kleine Ganzzahlen werden in einem einzelnen Byte kodiert, kurze Strings benötigen zusätzlich zum String selbst nur ein weiteres Byte
  • Unterstützt in mehr als 50 Programmiersprachen und Umgebungen
  • Anwendungsfälle:
    • Redis: Nutzt eine MessagePack-C-Erweiterung für Lua zur Datenserialisierung
    • Fluentd: Verwendet MessagePack für die interne Datendarstellung und ermöglicht Hochgeschwindigkeitsverarbeitung
    • Treasure Data: Aufbau einer mandantenfähigen Datenbank, optimiert für Analyseabfragen
    • Pinterest: Komprimierung des Feed-Caches und schnelle Verarbeitung mit MessagePack und Memcache

Zwei Konzepte: "Type System" und "Format"

  • Typsystem
    • Integer: Ganzzahl
    • Nil: null-Wert
    • Boolean: true oder false
    • Float: IEEE-754-Gleitkommazahl
    • Raw: String oder Byte-Array
    • Array: Objekt-Array
    • Map: Schlüssel-Wert-Paare
    • Extension: Benutzerdefinierter Typ
      • Timestamp: Zeitinformation
  • 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
    • Formatbeispiele
      • fixint: 7-Bit-Ganzzahl (positiv: 0x00–0x7F, negativ: 0xE0–0xFF)
      • fixstr: String mit bis zu 31 Byte
      • array 16: Array mit bis zu (2^16)-1 Elementen
      • map 16: Bis zu (2^16)-1 Schlüssel-Wert-Paare

Vorteile von MessagePack

  • Minimierte Datengröße und optimierte Geschwindigkeit
  • Ersatz und Verbesserung bestehender JSON-basierter Anwendungen
  • Durch die einfache Implementierung flexibel in verschiedensten Umgebungen einsetzbar

4 Kommentare

 
wedding 2025-01-21

Ich wollte MessagePack für die Kommunikation mit dem Game-Server einsetzen, aber die Flexibilität in verschiedenen Umgebungen hat in der Praxis nicht so gut funktioniert wie beschrieben. Deshalb habe ich protobuf verwendet.

 
ifmkl 2025-01-20

Vielleicht kenne ich mich da nicht gut genug aus, aber wenn man statt JSON der Größe und Geschwindigkeit wegen in Hex serialisiert ... was ist dann eigentlich der Unterschied zu früher, als man einfach binäre Serialisierung verwendet hat?

 
cichol 2025-01-20

Wenn man etwas einfach nur als Binärdaten ausgibt, ist es meist nur in der Sprache und Laufzeitumgebung gültig, in der es erzeugt wurde. Solche Formate werden dagegen in der Regel unter der Annahme entwickelt, dass Daten zwischen verschiedenen Sprachen und unterschiedlichen Umgebungen ausgetauscht werden.

 
ifmkl 2025-01-21

Aha. Verstehe. Danke für die Antwort.