MessagePackのベンチマーク
こんにちは。那由多屋の加藤です。
Rubyでプログラムを作る時に、中間の計算結果などをMarshal形式で保存することがよくあります。ですが、その計算結果が大きくなってきて、処理時間、ファイルサイズと共に増大してしまいました。
そこで、巷で話題(?)のMessagePackを使ってみることにしました。まずは、用途に近い状況でベンチマークを実施。
測定条件
- 1つの大きなハッシュテーブルのシリアライズ、デシリアライズ
- キーの数はn
- キーは、4〜10文字の半角英数字(乱数で生成)
- 値は、浮動小数点数(乱数)
- 乱数シードは固定
- 3回計測してその平均値を算出
- ruby 1.8.7-p249 (i386-mswin32)
- msgpack 0.3.2 (mswin32)
測定結果
n = 100,000
サイズ | シリアライズ | デシリアライズ | |
---|---|---|---|
MessagePack | 1,649,543 バイト | 0.093 秒 | 0.068 秒 |
Marshal | 3,247,163 バイト | 0.385 秒 | 0.332 秒 |
まとめ
MessagePackはMarshalに比べ4倍ほど速く、データサイズは1/2ほど。素晴らしい!