プロトコルバッファとBSON(バイナリJSON)、または一般的なJSONのパフォーマンス特性に関する情報を持っている人はいますか?
- ワイヤーサイズ
- シリアル化速度
- デシリアライズ速度
これらは、HTTPで使用するのに適したバイナリプロトコルのようです。長期的には、C#環境の方がどちらが良いのか疑問に思っています。
これが私がBSONとProtocolBuffersで読んでいたいくつかの情報です。
プロトコルバッファとBSON(バイナリJSON)、または一般的なJSONのパフォーマンス特性に関する情報を持っている人はいますか?
これらは、HTTPで使用するのに適したバイナリプロトコルのようです。長期的には、C#環境の方がどちらが良いのか疑問に思っています。
これが私がBSONとProtocolBuffersで読んでいたいくつかの情報です。
この投稿では、JSON、BSON、XMLなどの.NETでのシリアル化の速度とサイズを比較しています。
http://james.newtonking.com/archive/2010/01/01/net-serialization-performance-comparison.aspx
Thriftは、もう1つのProtocolBuffersのような代替手段です。
これらのテクノロジーのシリアル化/逆シリアル化とワイヤーサイズに関するJavaコミュニティからの優れたベンチマークがあります: https ://github.com/eishay/jvm-serializers/wiki
一般に、JSONのワイヤサイズはわずかに大きく、DeSerはわずかに劣りますが、ユビキタスであり、ソースIDLがなくても簡単に解釈できます。最後のポイントは、Apache Avroが解決しようとしていることであり、パフォーマンスの点で両方を上回っています。
Microsoftは、C#NuGetパッケージMicrosoft.Hadoop.Avroをリリースしました。
これは、人気のある.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倍低速です。
プロトコルバッファは、ワイヤ用に設計されています。
JSONは単なるテキストであり、解析する必要があります。ヒント:「billion」intをエンコードすると、かなり多くの文字が必要になります。Billion= 12文字(ロングスケール)、バイナリではuint32_tに収まります。次に、doubleをエンコードしようとするとどうでしょうか。それははるかに悪いでしょう。