Ich weiß, dass diese Frage an dieser Stelle etwas veraltet ist ... Ich denke, es ist sehr wichtig zu erwähnen, dass es davon abhängt, wie Ihre Client / Server-Umgebung aussieht.
Wenn Sie Bytes mehrmals ohne Überprüfung übergeben, z. B. mit einem Nachrichtenwarteschlangensystem oder dem Streamen von Protokolleinträgen auf die Festplatte, bevorzugen Sie möglicherweise eine Binärcodierung, um die kompakte Größe hervorzuheben. Ansonsten ist es ein Fall-zu-Fall-Problem mit verschiedenen Umgebungen.
Einige Umgebungen können eine sehr schnelle Serialisierung und Deserialisierung zu / von msgpack / protobufs haben, andere weniger. Im Allgemeinen funktioniert die binäre Serialisierung umso besser, je niedriger die Sprache / Umgebung ist. In höheren Sprachen (node.js, .Net, JVM) werden Sie häufig feststellen, dass die JSON-Serialisierung tatsächlich schneller ist. Die Frage wird dann, ob Ihr Netzwerk-Overhead mehr oder weniger eingeschränkt ist als Ihr Speicher / Ihre CPU.
In Bezug auf msgpack vs bson vs Protokollpuffer ... msgpack ist das kleinste Byte der Gruppe, wobei die Protokollpuffer ungefähr gleich sind. BSON definiert breitere native Typen als die beiden anderen und passt möglicherweise besser zu Ihrem Objektmodus, dies macht ihn jedoch ausführlicher. Protokollpuffer haben den Vorteil, dass sie für das Streaming ausgelegt sind ... was sie zu einem natürlicheren Format für ein binäres Übertragungs- / Speicherformat macht.
Persönlich würde ich mich auf die Transparenz stützen, die JSON direkt bietet, es sei denn, es besteht eindeutig ein Bedarf an weniger Verkehr. Bei HTTP mit komprimierten Daten ist der Unterschied im Netzwerk-Overhead zwischen den Formaten noch weniger problematisch.