- 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
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.
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?
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.
Aha. Verstehe. Danke für die Antwort.