5

私たちは、メッセージを格納し、非常に多くのメッセージを(1分に30kを超えて)プッシュするためにkafkaを使用しています。私はカフカのメッセージの作成者であるコードがjrubyにあるかどうかはわかりません。AvroとProtobufのパフォーマンスメトリック

メッセージをシリアライズしてデシリアライズすると、システムにパフォーマンスが影響します。

Avroとプロトコルバッファのシリアル化とデシリアライゼーションの速度を比較するのに役立つ人がいますか。

+1

私はたくさんのNicholasに感謝します:) – Nicholas

+0

その良いことをやって、btwは、プロトタイプのスタンプをルビの日時オブジェクトに変換する良い方法ですか? –

答えて

19

私はあなたにこれを伝えるのは嫌ですが、あなたの質問に簡単な答えはありません。

シリアライズ形式のパフォーマンスは、多くの要因によって異なります。まず第一に、パフォーマンスはの実装のプロパティそのものよりも優れています。あなたが本当に知りたいのは、各フォーマットの特定のJRuby実装がどれくらいうまく機能しているか(あるいは、それらをラッピングしている場合はJavaの実装かもしれません)です。その答えは、C++のような他の言語の答えと大きく異なるかもしれません。

さらに、パフォーマンスはライブラリの使用方法によって異なります。多くの図書館のAPIは、「簡単で遅い」方法と「速い、難しい」方法の間でトレードオフを提供します。最適化するときは、ドキュメントを慎重に検討し、ライブラリの作者のサンプルコードを探して、最大限のパフォーマンスを引き出す方法を学びたいと思うでしょう。

最終的に、そして最も重要なのは、作業しているデータによって大きく異なります。異なるフォーマットと実装は、異なる種類のデータを最適化します。たとえば、文字列重いデータは、数値の重いデータから非常に異なるコードパスを実行します。 JSONやXML *のすべてのフォーマットで、他のすべてのフォーマットより優れたパフォーマンスを発揮するユースケースを見つけることは常に可能です。図書館の著者のベンチマークには注意が必要です。これは、図書館の著者に有利なユースケースを強調する傾向があるためです。

残念ながら、どちらのフォーマットが優れているかを本当に知りたい場合は、コードの2つのバージョン、各ライブラリを使用するバージョン、およびそれらを比較するだけです。外部ベンチマークはあなたに本当の答えを与えることはできません。

は(私がいるProtobuf v2およびCap'n Protoの著者ので、私は、シリアル化のベンチマークを見て、パフォーマンスを考える多くの時間を費やしてきた。)

*ただ、XMLについて冗談。

+0

あなたからこれを聞いて偉大な、私たちはprotobufにシフトしていると、このポストをチェックアウトする:http://www.sammur.com/?p=36 –

+0

@AdityaSanghi申し訳ありませんが、私はRubyのprotobuf実装について何も知らないです。おそらく公式のtimestamp.protoは比較的新しく、おそらくまだ追加されていないかもしれませんが、どこかでライブラリ関数があるはずです。 –

関連する問題