web-dev-qa-db-ja.com

プロトコルバッファとJSONまたはBSON

プロトコルバッファ対BSON(バイナリJSON)または一般的なJSONのパフォーマンス特性に関する情報はありますか?

  • 電線サイズ
  • シリアル化速度
  • デシリアライズ速度

これらは、HTTP経由で使用するのに適したバイナリプロトコルのようです。私は、C#環境の長期的にはどちらが良いかと思っています。

[〜#〜] bson [〜#〜] および Protocol Buffers で読んでいた情報を次に示します。

87

Thrift は、プロトコルバッファーのような別の代替手段でもあります。

Javaこれらの技術のシリアライゼーション/デシリアライゼーションおよびワイヤサイズに関するコミュニティからの優れたベンチマークがあります。 https://github.com/eishay/jvm-serializers/wiki

一般に、JSONのワイヤサイズはわずかに大きく、DeSerはわずかに劣りますが、ユビキタス性とソースIDLなしで簡単に解釈できる能力に勝っています。最後のポイントは、 Apache Avro が解決しようとしていることであり、パフォーマンスの点で両方に勝っています。

MicrosoftはC#NuGetパッケージをリリースしました Microsoft.Hadoop.Avro

63
Michael Greene

この投稿 JSON、BSON、XMLなど、.NETのシリアル化の速度とサイズを比較します。

alt text

alt text

http://james.newtonking.com/archive/2010/01/01/net-serialization-performance-comparison.aspx

74

最近のベンチマーク 一般的な.NETシリアライザーのパフォーマンスを示しています。

Burning Monksベンチマーク は単純なPOCOのシリアル化のパフォーマンスを示し、包括的な Northwindベンチマーク はMicrosoftのNorthwindデータセットのすべてのテーブルの行をシリアル化した結果を示しています。

enter image description here

基本的にプロトコルバッファー( protobuf-net )は、.NETの最速のベースクラスライブラリシリアライザー(XML DataContractSerializer)よりも高速7xです)。また、競合他社よりも小さく2.2xMicrosoftの最もコンパクトなシリアル化形式(JsonDataContractSerializer)よりも小さくなっています。

ServiceStackのテキストシリアライザーは、 Json Serializer2.58xより遅いバイナリprotobuf-netのパフォーマンスに最も近いprotobuf-netより。

50
mythz

プロトコルバッファはワイヤ用に設計されています。

  1. 非常に小さいメッセージサイズ-1つの側面は、非常に効率的な可変サイズの整数表現です。
  2. 非常に高速なデコード-バイナリプロトコルです。
  3. protobufは、メッセージのエンコードおよびデコード用に超効率的なC++を生成します-ヒント:すべてのvar-integersまたは静的サイズのアイテムをエンコードすると、確定的な速度でエンコードおよびデコードされます。
  4. 非常に複雑なデータ構造を効率的にエンコードする非常に豊富なデータモデルを提供します。

JSONは単なるテキストであり、解析済みである必要があります。ヒント: "billion" intをエンコードするには、かなり多くの文字が必要になります。Billion= 12文字(長いスケール)、バイナリではuint32_tに収まります。それははるかに悪いことです。

22
Hassan Syed