2006-05-08
■ データの直列化(シリアライゼーション)まとめ 
データの直列化とは,大雑把に言えばPerlのデータ構造(スカラー,配列,ハッシュ,リファレンスなど)を単一の文字列で表現することだ。例えば以下のようなデータをファイルに保存したいとする。
my $data = 'hoge';
これを保存するにはprintで出力するだけで良い。
open my $fh, '>data.txt' or die $!; print $fh $data;
配列になると少し複雑になる。
my @data = ('a', 'b', 'c'); open my $fh, '>file.txt' or die $!; print $fh join "\n", @data; # 後で読み出す時に・・・ my @data = <$fh>;
この例のように改行が区切り文字なっていればまだマシだが,データ自体に改行文字が入っていると使えない。さらに,以下のようなデータではもう手が付けられない。
# どうやって保存すれば・・・(;´Д`) my $data = { hoge => 'a', foo => 'b', bar => ['c', 'd', 'e'], };
頑張って独自の保存フォーマットを考えることも出来るが,保存フォーマットがデータ構造に依存しているためにデータ構造が変わるたびにコードの書き直しになる。このような時のために,どんなデータ構造にも対応するように保存フォーマットを汎用化したのがデータ直列化モジュール(シリアライザ)である。以下に代表的なデータ直列化モジュールをまとめてみた。
Data::Dumper
Data::Dumperはデータ構造をPerlコードで表現する。データを復元するにはevalするだけでよい。evalを使うため,外部の人間のコードを実行してしまう危険をはらんでいる。Data::TreeDumperはWindowsのエクスプローラのようにツリー状のフォーマットで直列化する。
YAML,JSON
YAMLはデータ直列化に使用することを目的に考案された言語で,Perl以外のスクリプト言語でも使用できる。一方,JSONは直列化にJavaScriptコードを利用したもので,YAMLとJSONは互いに記法の互換性が有る。
Storable,FreezeThaw
Storableはバイナリデータで直列化を行うモジュールで,他のモジュールに比べて高速に動作する。FreezeThawはテキストデータだが圧縮率が高い独自フォーマットを使っている。StorableはPerlのバージョン間で互換性が無いという欠点が有る。
XML::Dumper
このモジュールはXMLでデータを直列化する。Perl以外のシステムとの相互運用に使えるかもしれない。
直列化を利用したモジュール
Tie::SaveLaterはデータの直列化,保存,復元を自動化するためのフレームワークで,AnyDBM_Fileと同じ使い勝手を実現してくれる。Data::Serializerはデータ直列化を拡張し,暗号化や圧縮ができるようにしたものだ。
まとめ
直列化モジュールを使うことにより,データベースのO/Rマッピングの様なことが簡単に実現できる。アプリケーションのデータベースや設定ファイルの保存に使ってみると便利である。
アチラ側のWEBサービスの問題でしょうか・・?
http://www.forbes.com/feeds/popstories.xml