snuffkinの遊び場

IT関係、スポーツ、数学等に関することを、気が向いたときに書いてます。

MessagePack vs POF(Coherence)でシリアライズサイズの勝負!

前回はJBoss MarshallingとMessagePackのシリアライズサイズを比較してみましたが、今回はCoherenceで使用しているPortable Object Format(POF)も比較してみましょう。
Oracleのページから評価版のCoherenceをダウンロードすれば良かったのかもしれませんが、手っ取り早くWebから情報を探してきました。「CoherenceのPOF形式でシリアライズされたオブジェクトのサイズ見積もりツール」(山本大@クロノスの日記)にPOFのシリアライズサイズについて載っています(こういう情報、ありがとうございます)。このページでは「Person.java」に「ExampleMain.java」でサンプルデータを入れてサイズ測定をしています。同じクラス、データでMessagePackでシリアライズして比較してみました。

フレームワークの紹介

Coherenceで使われているシリアライズの仕組み。Javaシリアライズでは効率が悪いため、独自に開発されました。言語に依存しないシリアライズの仕組みです。

その他についての紹介は、前回を参照してください。

シリアライズ結果

早速ですが、シリアライズ結果です。今回はJava標準のシリアライズも計測してみました。

Java標準

171byteのサイズにシリアライズされました。山本大さんのページに書いてある結果とも一致しています。

JBoss Marshallingと同じくクラス名の情報がシリアライズされたデータに入っているため、大きなデータになっています。

JBoss Marshalling

141byteのサイズにシリアライズされました。

Java標準より82%のサイズになっていますが、大きく変わったようには見えませんね。java.langパッケージの場合は、クラス名を短く表記できるようになってそうですね。

さて、ここからが本題です。

Portable Object Format

山本大さんのページの調査結果によると29byteのサイズにシリアライズされるそうです。手元にCoherenceがないので、すみませんがキャプチャはありません。Java標準の17%、JBoss Marshallingの21%のサイズになっています。

MessagePack

24byteのサイズにシリアライズされました。

おおっ、さすが。接戦ですが、POFに5byte勝ちました。Java標準の14%、JBoss Marshallingの17%、POFの83%のサイズになっています。MessagePackとPOFは、Java標準やJBoss Marshallingと比べると随分小さくシリアライズできるんですね。

という訳で、今回もMessagePackの勝ち!サイズ勝負だと、POFもなかなかでしたが、MessagePackが強いですね。
この結果は、シリアライザの総合力を比較しているのではなく、特定のデータをいかに小さなサイズにシリアライズできるかのみの観点で見ています。あくまでも、ひとつの側面としてご参考ください。