93

プロトコルバッファとBSON(バイナリJSON)、または一般的なJSONのパフォーマンス特性に関する情報を持っている人はいますか?

  • ワイヤーサイズ
  • シリアル化速度
  • デシリアライズ速度

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

これが私がBSONProtocolBuffersで読んでいたいくつかの情報です。

4

4 に答える 4

75

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

代替テキスト

代替テキスト

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

于 2010-01-04T20:36:34.817 に答える
66

Thriftは、もう1つのProtocolBuffersのような代替手段です。

これらのテクノロジーのシリアル化/逆シリアル化とワイヤーサイズに関するJavaコミュニティからの優れたベンチマークがあります: https ://github.com/eishay/jvm-serializers/wiki

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

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

于 2010-01-04T17:41:09.287 に答える
54

これは、人気のある.NETシリアライザーのパフォーマンスを示す最近のベンチマークです。

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

ここに画像の説明を入力してください

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

ServiceStackのテキストシリアライザーは、バイナリprotobuf-netのパフォーマンスに最も近いものであり、Jsonシリアライザーはprotobuf-netよりもわずか2.58倍低速です。

于 2010-08-18T03:00:02.877 に答える
25

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

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

JSONは単なるテキストであり、解析する必要があります。ヒント:「billion」intをエンコードすると、かなり多くの文字が必要になります。Billion= 12文字(ロングスケール)、バイナリではuint32_tに収まります。次に、doubleをエンコードしようとするとどうでしょうか。それははるかに悪いでしょう。

于 2010-01-04T17:40:59.413 に答える