Top / Programming / Ruby / Ruby データベースライブラリ / Madeleine

Madeleine

Madeleineは、オブジェクト永続化機構です。

オブジェクトのスナップショットをとることができます。

ダウンロード

インストール

gem をダウンロードしたとき(RubyGemsが必要です)

# gem install madeleine-0.7.1.gem

tar.gz をダウンロードしたとき

$ ruby install.rb config
$ ruby install.rb setup
# ruby install.rb install

使用方法

Madeleineをロードする

require 'madeleine'

オブジェクトの読み込み

SnapshotMadeleine.new()で、インスタンスを生成します。

最初の引数は、オブジェクトを保存するディレクトリ名です。ディレクトリがなければ作成されます。

2番目の引数は、マーシャルに使用するクラスです。指定しない場合は Marshal になります。

ブロックは、オブジェクトを作成する処理です。永続化するオブジェクトを作成します。

madeleine = SnapshotMadeleine.new("data_dir") do
  Array.new
end

ブロックの処理でオブジェクトを作成した後、ディレクトリにあるコマンドログを順次実行していき、オブジェクトの状態を復元します。

オブジェクトの更新

オブジェクトには、コマンドオブジェクトを通してアクセスします。 コマンドオブジェクトは execute(system) メソッドを実装したオブジェクトです。

require 'madeleine'
# データを追加するコマンド
class PushCommand
  def initialize(data)
    @data = data
  end
  def execute(system)
    system.push(@data)
  end
end
# 値を取得するコマンド
class QueryCommand
  def initialize(data)
    @data = data
  end
  def execute(system)
    system[@data]
  end
end
madeleine = SnapshotMadeleine.new("data_dir") do
  Array.new
end
madeleine.execute_command(PushCommand.new('hoge'))
puts madeleine.execute_command(QueryCommand.new(0))

コマンドオブジェクトには、Madeleine::Automatic::Command という汎用的なクラスが用意されています。(使える?)

動作の概要

オブジェクトを保存するディレクトリには、コマンドを実行するとコマンドログのファイルが作成されます。

$ ls
000000000000000000001.command_log
000000000000000000002.command_log
000000000000000000003.command_log

このログファイルの内容は、コマンドオブジェクトをマーシャルしたデータです。

コンストラクタでは、このマーシャルしたコマンドオブジェクトを復元し、実行することで、オブジェクトの状態を復元します。

関連ページ

更新履歴