Hat jemand Informationen zu den Leistungsmerkmalen von Protokollpuffern gegenüber BSON (binäres JSON) oder gegenüber JSON im Allgemeinen?
- Drahtstärke
- Serialisierungsgeschwindigkeit
- Deserialisierungsgeschwindigkeit
Dies scheinen gute binäre Protokolle für die Verwendung über HTTP zu sein. Ich frage mich nur, was auf lange Sicht für eine C # -Umgebung besser wäre.
Hier sind einige Informationen, die ich über BSON und Protokollpuffer gelesen habe .
c#
json
comparison
protocol-buffers
bson
Jeff Fleischbällchen Yang
quelle
quelle
Antworten:
Thrift ist ebenfalls eine Alternative wie Protokollpuffer.
Es gibt gute Benchmarks aus der Java-Community zur Serialisierung / Deserialisierung und Kabelgröße dieser Technologien: https://github.com/eishay/jvm-serializers/wiki
Im Allgemeinen hat JSON eine etwas größere Drahtgröße und ein etwas schlechteres DeSer, gewinnt jedoch an Allgegenwart und der Fähigkeit, es ohne die Quell-IDL leicht zu interpretieren. Der letzte Punkt ist etwas, das Apache Avro zu lösen versucht, und er übertrifft beide in Bezug auf die Leistung.
Microsoft hat ein C # NuGet-Paket Microsoft.Hadoop.Avro veröffentlicht .
quelle
In diesem Beitrag werden Serialisierungsgeschwindigkeiten und -größen in .NET verglichen, einschließlich JSON, BSON und XML.
http://james.newtonking.com/archive/2010/01/01/net-serialization-performance-comparison.aspx
quelle
Hier sind einige aktuelle Benchmarks, die die Leistung beliebter .NET-Serializer zeigen.
Die Burning Monks-Benchmarks zeigen die Leistung der Serialisierung eines einfachen POCO, während die umfassenden Northwind-Benchmarks die kombinierten Ergebnisse der Serialisierung einer Zeile in jeder Tabelle des Northwind-Datasets von Microsoft zeigen.
Grundsätzlich sind Protokollpuffer ( protobuf-net ) etwa 7x schneller als die schnellste Basisklassenbibliothek Serializer in .NET (XML DataContractSerializer). Es ist auch kleiner als die Konkurrenz, da es auch 2,2-mal kleiner ist als das kompakteste Serialisierungsformat von Microsoft (JsonDataContractSerializer).
Die Text-Serialisierer von ServiceStack entsprechen am ehesten der Leistung des binären Protobuf-Netzes, wobei der Json-Serializer nur 2,58-mal langsamer als der Protobuf-Netz ist.
quelle
Protokollpuffer sind für den Draht ausgelegt:
JSON ist nur Text und muss analysiert werden . Hinweis: Das Codieren einer "Milliarde" int würde ziemlich viele Zeichen erfordern: Milliarden = 12 Zeichen (lange Skala), binär passt es in ein uint32_t. Was ist nun mit dem Versuch, ein Double zu codieren? das wäre weitaus schlimmer.
quelle
the wire
bedeutet nur Netzwerk. Wenn wir jetzt so viele drahtlose Netzwerke verwenden, klingt das vielleicht komisch.