Protocol Buffer、Thrift、Avro、MessagePack for Javaのパフォーマンス測定
@frsyukiさんの作っているMessagePackのJava版が出ていたので軽くパフォーマンス測定してみました。
パフォーマンス測定に使ったプロジェクトは、TPC(Thrift-ProtocolBuffer-Compare)です。TPCはシリアライズ、デシリアライズテクノロジを色々とベンチマークして、かつ最後にGoogleChartでグラフを出してくれる賢いやつです。GJ、TPC。ちなみに今回の測定のやつは、自前でAMF用作ったり、ややカスタマイズしてます。
測定は、イテレーション数を500、1000、2000回でそれぞれ測定しました。測定結果及びまとめは私の主観なので、そこは各自測定して、各々判断されるのがベストと思います。何かの参考になれば程度に考えてください。
環境
- Windows XP Pro SP2
- Sun JDK 1.6.0_13
- メモリ2GB
- Eclipse 3.5
結論
- avroは全体的に高パフォーマンスだが、生成コストが非常に高い
- messagepackはかなり早い、Totalで考えると、avro、Protocol Buffer、Thriftなどとほぼ同等
- 誤差の範囲内の可能性もあるが、AvroとProtocolBufferはデシリアライズの安定度がある可能性アリ
- jsonも意外とわるくないパフォーマンスを出している
- XStreamとHessianが遅すぎる...(が、これは何か使い方等間違いがあるんじゃないかと疑惑。。。)
- javaのシリアライゼーションも遅いほうに入る
全てナノタイム計算なので、上位五位くらいまではほぼ誤差の範囲内で問題ないと思います。というわけで、MessagePack for Javaも相当早い部類にはいります。
課題としては、以下の点があります。
- このパフォーマンス測定で使ったオブジェクトは比較的シンプルなPOJOなのでその複雑度に対しては評価が必要
- メモリ使用量/CPU使用量など負荷感に関しては特に観測データがない
- OSによる精度差が十分考えられる
- 開発容易性などの観点が無い(IDL形式か、など)
以下、測定結果です。