22

さまざまなプロセスとコンピューター間で渡される単純なデータ構造の多くのシリアル化と逆シリアル化を行う必要がある分散 C++ アプリケーションを構築しています。

複雑なクラス階層をシリアル化することには興味がありませんが、数値、文字列、データ ベクトルなどのいくつかの単純なメンバーを持つ構造体を送信することに関心があります。データ ベクトルは、多くの場合、数メガバイトの大きさになることがあります。テキスト/xml ベースの方法では遅すぎるのではないかと心配しています。文字列のエンコーディングや数値のエンディアンなどの問題により、見た目よりも複雑になる可能性があるため、自分でこれを書きたくありません。

プロトコル バッファと boost.serialize について少し調べてみました。ドキュメントによると、プロトコル バッファはパフォーマンスを重視しているようです。Boost は、この特定のプロジェクトに非常に便利なデータ形式を指定するための外部言語がないという意味で、やや軽量に見えます。

だから私の質問はこれに帰着します:私が上で説明した典型的なユースケースでブーストシリアライゼーションが速いかどうか誰か知っていますか?

また、これに適したライブラリが他にある場合は、それらについてお知らせいただければ幸いです。

4

8 に答える 8

14

プロトコル バッファを強くお勧めします。それらは非常に使いやすく、優れたパフォーマンスを提供し、エンディアンや下位互換性などの問題に対処します。さらに魅力的なのは、シリアル化されたデータは、多数の言語実装のおかげで言語に依存しないことです。

于 2008-11-27T06:06:28.003 に答える
4

ACE と ACE TAO が思い浮かびますが、そのサイズと範囲が気に入らないかもしれません。 http://www.cs.wustl.edu/~schmidt/ACE.html

「高速」とブーストに関するお問い合わせについて。これは主観的な用語であり、要件 (スループットなど) を知らなければ、それに答えるのは困難です。私自身、ブーストに関するベンチマークを持っているわけではありません...

使用できるメッセージング レイヤーがありますが、それらはおそらくブーストよりも低速です。あなたはブーストで良い解決策を特定したと思いますが、私はACEと他の独自の通信/メッセージング製品しか使用していません.

于 2008-11-26T18:13:13.667 に答える
3

ONC-RPC (旧 SUN-RPC)もチェックしてください。

于 2008-11-28T14:43:38.553 に答える
3

私の推測では、ブーストは十分に速いです。以前のプロジェクトで、ディスクとの間でデータをシリアル化するために使用しましたが、そのパフォーマンスが問題になることはありませんでした。

ここでの私の回答は、シリアライゼーション全般に​​ついて述べています。これは、使用するシリアライゼーション ライブラリを超えて役立つ場合があります。

そうは言っても、シリアライゼーション (エンディアン文字列エンコーディング) に関する主な問題点のほとんどはご存知のようです。バージョン管理と前方/後方互換性を除外しました。時間が重要でない場合は、独自のシリアル化コードを作成することをお勧めします。それは啓発的な経験であり、あなたが学ぶ教訓はかけがえのないものです。警告はしますが、XML ベースのプロトコルは肥大化するので嫌いになる傾向があります。:)

どの道を選んだとしても、あなたのプロジェクトで幸運を祈ります。

于 2008-11-26T18:46:56.143 に答える
2

明確に定義されたデータ構造のみを送信する場合は、おそらくASN.1をエンコード方法として検討する必要がありますか?

于 2008-11-26T19:31:50.607 に答える
2

boost.serialization は、文字列のエンコーディングやエンディアンを気にしません。それがあなたにとって重要な場合は、それを使用しないことも同様にうまくいくでしょう.

ZeroC の ICE を調べてみてください: http://www.zeroc.com/

会社によって完全に仕様および定義されていることを除いて、CORBA と同様に機能します。利点は、実装がそれほど多くないため、意図したとおりに機能することです。欠点は、サポートされていない言語を使用している場合、運が悪いことです.

于 2008-11-26T18:29:28.940 に答える
1

アルファ プロジェクトのように見えますが、Facebook によって使用および開発されているThriftもあるため、少数のユーザーがいます。

または、MSがCOMに使用することを決定した標準であった古き良きDCE 。現在はオープンソースであり、20 年遅すぎますが、ないよりはましです。

于 2009-03-15T18:40:37.923 に答える
0

事前に最適化しないでください。最初に測定し、次に最適化します。

于 2008-11-26T18:32:13.880 に答える