web-dev-qa-db-ja.com

MicrosoftのボンドとGoogleのプロトコルバッファーの違い

最近(2015年1月)Microsoftがオープンソース化 Bond 、スキーマ化されたデータを操作するためのフレームワーク。多くの点で、Googleの Protocol Buffers に似ています。

2つの間の最大の違いは何ですか?長所と短所は何ですか。つまり、どちらか一方を使用したいが、もう一方は使用したくないという状況ですか。もちろん、私は他のプロジェクトや既存のAPIとの一貫性のような明白なことについて話しているのではなく、両方のライブラリの機能について話しているのです。例を挙げると、ボンドには bonded<T> これは、私が正しく覚えていれば、プロトコルバッファに対応するものがありません。

26
dtldarek

一般に、Bondはより良い型システムを持ち、複数のプロトコルをサポートしています。

特に、長所は次のとおりです。

  • ボンドはジェネリック医薬品をサポート
  • Bondには、コレクションを表すさまざまなタイプがあります:vector<T>map<T>list<T>
  • Bondはタイプセーフなレイジーデシリアライゼーションをサポートしています(bonded<T>
  • Bondは複数の形式(高速バイナリ、コンパクトバイナリ、XML、JSON)+マーシャリングとトランスコーディングをサポートしています

短所:

  • Bondは、固定整数エンコーディングと可変整数エンコーディングの異なるタイプをサポートしていません。 Bondでは、整数のエンコード方法は出力形式(高速またはコンパクト)によって決定されますが、プロトコルバッファーには、常に固定サイズを持つ整数型があります:fixed32およびfixed64
  • Bondはユニオンタイプをサポートしていません(プロトコルバッファーのoneof

いくつかのテストを行いましたが、BondとProtoBufバイナリ形式の単純なメッセージのサイズはほぼ同じであるようです。 BondとC#ProtoBufライブラリを使用してシリアル化と逆シリアル化の時間を比較しました。私の場合、Bondの方が少しパフォーマンスが良く、私の GitHubのソースコード

要約すると、いくつかの複雑なタイプのデータを操作する場合、または同じデータを異なる形式で表現する必要がある場合は、Bondを使用する方が良いと思います。バイナリとして保存しますが、JSONなどとして公開します。

30
takemyoxygen