前の記事 ≪:2010年12月14日 管理人のブックマーク
次の記事 ≫:ピュアCSSでonclickイベントをシュミレーションするデモ

phpのserializeを使うより高速でサイズもコンパクトに仕上げる「MessagePack」とPHP拡張

2010年12月15日-はてなブックマーク

スポンサード リンク
[PR] 英単語を忘却曲線アプリを使って超効率よく記憶する方法

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サービスにおいてはかなり有難いライブラリですね。
是非活用させていただきましょう。

関連エントリ

関連の記事検索:PHP, MessagePack, serialize, プログラミング
スポンサード リンク

By.KJ : 2010年12月15日 09:08 livedoor Readerで購読 Twitterに投稿

間違いの指摘をしていただける方はメール、あるいはTwitter/FBでお願いします(クリック)