rubyでMarshalとBase64を使ってシリアライズ
rubyのデータ構造をDBに保存しようの巻。
シリアライズにMarshalを、DBへの保存の際にBase64を使用。
他にシリアライズの形式としてYAML形式があるけど、Marshalより遅い気がする。多分。
Marshalがデータをバイナリで扱うのに対して、YAMLは平文なので。
セッションデータのDBに保存・リストアの例。
DBのスキーマ
- session_id
- セッションを一意に特定するID
- data
- データの実体
シリアライズ
require 'base64' session = {:hoge => 'huga'} # 何かデータを突っ込む session = Base64.b64encode( Marshal.dump(session) ) Session.new(:session_id => session_id, :data => session).save
デシリアライズ
require 'base64' session = Session.find_by_session_id( session_id ) data = session.data data = Marshal.load( Base64.decode64(data) ) hoge = data[:hoge]