MessagePackとはシリアライズ(バイナリエンコード)の方法の一つで

  • シリアライズ/デシリアライズが高速
  • シリアライズされたサイズが小さい

ProtocolBuffersと似たような性質を持ちますが、ProtocolBuffersと違って

  • IDLが不要で汎用的
  • ストリーム処理が可能(ProtocolBuffersでも出来るのかもしれませんが)

という特徴を持ちます。TreasureDataのバックエンドであるPlazmaDBやfluentdでも利用されている技術になります。

ということで今回はMessagePackを触ってみました。

RubyでMessagePackを試す

以下でGemをインストール

シリアライズして標準出力に出力するRubyの例

MessagePack形式の標準入力をデシリアライズした結果をJSONで出力する例

サイズメリットはこんな感じ

コストメリットは超ざっくりですが、以下のスクリプトでベンチマークを取りました。

実行結果↓

JSONと比較するとシリアライズがかなり高速です。デシリアライズもJSONの2倍高速。

MessagePack IDLも試してみる

MessagePackにはProtocolBuffersと同様にIDLもあります。

まずはHaskellのインストール

MessagePack IDLのインストール&設定

がうまくいかず…orz

git cloneでcabal installしてもダメ。なぜ…

参考URL