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]