Hatena::ブログ(Diary)

おおたに6号機blog このページをアンテナに追加 RSSフィード

2009-11-12(木)

[]Protocol Buffer、Thrift、Avro、MessagePack for Javaパフォーマンス測定 14:06 Protocol Buffer、Thrift、Avro、MessagePack for Javaのパフォーマンス測定を含むブックマーク

@frsyukiさんの作っているMessagePackのJava版が出ていたので軽くパフォーマンス測定してみました。



パフォーマンス測定に使ったプロジェクトは、TPC(Thrift-ProtocolBuffer-Compare)です。TPCシリアライズ、デシリアライズテクノロジを色々とベンチマークして、かつ最後にGoogleChartでグラフを出してくれる賢いやつです。GJTPC。ちなみに今回の測定のやつは、自前でAMF用作ったり、ややカスタマイズしてます。


測定は、イテレーション数を500、1000、2000回でそれぞれ測定しました。測定結果及びまとめは私の主観なので、そこは各自測定して、各々判断されるのがベストと思います。何かの参考になれば程度に考えてください。



環境


結論

  • avroは全体的に高パフォーマンスだが、生成コストが非常に高い
  • messagepackはかなり早い、Totalで考えると、avro、Protocol Buffer、Thriftなどとほぼ同等
  • 誤差の範囲内の可能性もあるが、AvroとProtocolBufferはデシリアライズの安定度がある可能性アリ
  • jsonも意外とわるくないパフォーマンスを出している
  • XStreamとHessianが遅すぎる...(が、これは何か使い方等間違いがあるんじゃないかと疑惑。。。)
  • javaのシリアライゼーションも遅いほうに入る


全てナノタイム計算なので、上位五位くらいまではほぼ誤差の範囲内で問題ないと思います。というわけで、MessagePack for Javaも相当早い部類にはいります。


課題としては、以下の点があります。





以下、測定結果です。




見方

timeCreate : オブジェクト生成

timeSer : シリアライズコストオブジェクト生成コストは含まない)

timeDser : デシリアライズコスト

totalTime : オブジェクト生成コストシリアライズとデシリアライズ含む全てのコスト

length : シリアライズ後のオブジェクトサイズ

イテレーション500






イテレーション1000







イテレーション2000