phpのserializeを使うより高速でサイズもコンパクトに仕上げる「MessagePack」とPHP拡張
2010年12月15日-
The MessagePack Project
phpのserializeを使うより高速でサイズもコンパクトに仕上げる「MessagePack」とPHP拡張。
結構前のエントリのご紹介なので知っている人も多いと思うのですがご紹介。
phpには serialize という関数があって、配列等の複雑なデータも文字列にして、ファイル等に保存し、後ほど unserialize 等で変数に戻せて便利なのですが、MessagePackとそのPHP拡張を使えば、より高速で、serialize後のデータも小さくできます。
MessagePack自体はkumofsの内部で使われていて、PHP以外にもc++, erlang, haskell, java, perl, python, ruby 等メジャーな多くの言語に対応しています。
複雑なデータで試したところserialize後の文字列データが1/2になり、ベンチマークの結果も2倍以上の速度差が出ました(データサイズにもよります)。
同じデータシリアライズだったら性能のよいものを使った方がいいですね。
というわけで、phpのserializeをよく使う方は試しておくとよさそうです。
導入方法ですが、githubのmsgpackページからソースを落として以下の流れで入れます(UNIX環境)。
$ git clone https://github.com/msgpack/msgpack.git
$ cd msgpack/php
$ phpize && ./configure && make
$ sudo make install
インストールしたら、php.ini に extension=msgpack.so を追記して、apache上で動かす場合はapacheを再起動しましょう。
サンプルコードは以下で、serialize を msgpack_pack に、unserialize を msgpack_unpack に読み替えるだけでOK。
<?php
$data = array(1,2,3,4,5,6,7,8,9, '日本語');
$packed = msgpack_pack($data); // serialize と同等
var_dump(msgpack_unpack($packed)); // unserialize と同等
?>
速度が要求されるWEBサービスにおいてはかなり有難いライブラリですね。
是非活用させていただきましょう。
関連エントリ
最新のブログ記事(新着順)
- CSSで太陽が差し込むようなアニメーション実装
- 可愛くアニメーションする「beautifully crafted animated icons」
- アイソメトリックなアイコンがアイコンがPNG,SVGでゲットできる「Isoicons」
- ユニークなカタカナフォントtorisippo
- 美しいメッシュグラデーションをCSSで簡単に取得できる「MSHR」
- TailwindCSSなサイトで使える100以上のアニメーションエフェクト「animata」
- SVG形式のテック系企業のロゴを簡単にゲットできる「Svgl」
- 統一感のある色味を一括生成できるツール「The good colors」
- くちばしフォント【商用可】
- 小説表紙などに使えそうな商用可なフォント「になロマン」
- 過去のエントリ