MessagePackのベンチマーク

 こんにちは。那由多屋の加藤です。

 Rubyでプログラムを作る時に、中間の計算結果などをMarshal形式で保存することがよくあります。ですが、その計算結果が大きくなってきて、処理時間、ファイルサイズと共に増大してしまいました。

 そこで、巷で話題(?)のMessagePackを使ってみることにしました。まずは、用途に近い状況でベンチマークを実施。

測定条件

測定結果

n = 100,000
サイズ シリアライズ シリアライズ
MessagePack 1,649,543 バイト 0.093 秒 0.068 秒
Marshal 3,247,163 バイト 0.385 秒 0.332 秒
n = 1,000,000
サイズ シリアライズ シリアライズ
MessagePack 16,486,099 バイト 0.987 秒 1.321 秒
Marshal 32,450,668 バイト 5.662 秒 4.186 秒
n = 5,000,000
サイズ シリアライズ シリアライズ
MessagePack 82,176,922 バイト 5.361 秒 11.903 秒
Marshal 測定不能 測定不能 測定不能

Marshalの方は、NoMemoryError(failed to allocate memory)が発生して、シリアライズすらできませんでした。

まとめ

MessagePackはMarshalに比べ4倍ほど速く、データサイズは1/2ほど。素晴らしい!