カテゴリー:
Rails
タグ:
 Rails msgpack MessagePack serialize marshal

このエントリーをはてなブックマークに追加
更新日時:
2013年12月23日(月)
作成日時:
2013年12月23日(月)

前の記事 / 次の記事

MarshalやJsonよりも高速にシリアライズできるMessagePack
というものがあるようなのでRailsで使ってみるメモ。

参考ページ

インストール

vi Gemfile
gem msgpack

$ bundle install

Serialize

MessagePack.pack obj

または

obj.to_msgpack

Deserialize

MessagePack.unpack obj

RailsでシリアライズされたデータをDBに保存する

class CreateHistories < ActiveRecord::Migration
  def change
    create_table :histories do |t|
      t.string  :name
      t.text    :some_data

      t.timestamps
   end
  end
end


class Model < ActiveRecord::Base
  serialize :some_data

  #
  # class_name を指定すると指定したクラス以外受け付けなくなる。
  # デフォルトでは Object クラスが指定される。
  #
  # serialize: :some_data, class_name: Array
  #
end

Jsonで扱えないデータはシリアライズできない

msgpackでシリアライズするとJsonのようなものにシリアライズされるのだけど、
Jsonで扱えないデータはmsgpackでも扱えない(DateTimeとか)。
扱いたい場合は一工夫必要。

次のコードは書けない

["string", ["array", "array"], DateTime.now].to_msgpack

次のコードは書ける

["string", ["array", "array"], DateTime.now.to_s].to_msgpack