magic_multi_connections を試してみた
ruby の ActiveRecord の使い方をしらべていて、magic_multi_connections というものが
あることを知った。
- http://d.hatena.ne.jp/Rommy/20070514/1179164848
> > 分散DB対応ライブラリ Magic Multi-Connections を試してみる - 半隠遁日記
ここにあったソースコードをベースに、自分も試してみた。
3つの ruby ファイルをつくった。以下にそれを示そう。
1. multi_common.rb // 下の2つで共通に使う部分
2. multi_create.rb // テーブルの新規作成と、初期データ設定
3. multi_crud.rb // テーブル中データの Create/Read/Updae/Delete
1. multi_common.rb
$ cat multi_common.rb
# See
# http://d.hatena.ne.jp/Rommy/20070514/1179164848require "rubygems"
require "fileutils"
require "active_record"
require "magic_multi_connections"ActiveRecord::Base.configurations = {
"db1" => {:adapter => "sqlite3", :dbfile => "db01.db"},
'db2' => {:adapter => "sqlite3", :dbfile => "db02.db"},
}
ActiveRecord::Schema.verbose = falsemodule Main
establish_connection :db1
endmodule Sub
establish_connection :db2
endclass User < ActiveRecord::Base
end
2. multi_create.rb
$ cat multi_create.rb
require "multi_common"include Main
include Sub# ActiveRecord::Base.logger = Logger.new(STDERR)
# ActiveRecord::Base.colorize_logging = false# Data 初期化
ActiveRecord::Base.configurations.each{|key, configuration|
FileUtils.rm_f(configuration[:dbfile])
ActiveRecord::Base.establish_connection(key)
ActiveRecord::Schema.define {
create_table("users"){|t|
t.column "name", :string
}
}
}# db1 で作成
Main::User.create!(:name => "a")
Main::User.create!(:name => "b")# db2 で作成
Sub::User.create!(:name => "c")
Sub::User.create!(:name => "d")# データの確認
p Main::User.find(:all).map{|c| c.attributes} #=> [{"name"=>"a", "id"=>1}, {"name"=>"b", "id"=>2}]
p Sub::User.find(:all).map{|c| c.attributes} #=> [{"name"=>"c", "id"=>1}, {"name"=>"d", "id"=>2}]
3. multi_crud.rb
$ cat multi_crud.rb
require "multi_common"# ActiveRecord::Base.logger = Logger.new(STDERR)
# ActiveRecord::Base.colorize_logging = false# データの確認
p Main::User.find(:all).map{|c| c.attributes} #=> [{"name"=>"a", "id"=>1}, {"name"=>"b", "id"=>2}]
p Sub::User.find(:all).map{|c| c.attributes} #=> [{"name"=>"c", "id"=>1}, {"name"=>"d", "id"=>2}]# データ追加
Main::User.create!(:name => "x")
Sub::User.create!(:name => "y")
# データの確認
p Main::User.find(:all).map{|c| c.attributes} #=> [{"name"=>"a", "id"=>1}, {"name"=>"b", "id"=>2}, {"name"=>"x", "id"=>3}]
p Sub::User.find(:all).map{|c| c.attributes} #=> [{"name"=>"c", "id"=>1}, {"name"=>"d", "id"=>2}, {"name"=>"y", "id"=>3}]# データ削除
Main::User.delete_all(:name=>"b")
Sub::User.delete_all(:name=>"d")
# データの確認
p Main::User.find(:all).map{|c| c.attributes} #=> [{"name"=>"a", "id"=>1}, {"name"=>"x", "id"=>3}]
p Sub::User.find(:all).map{|c| c.attributes} #=> [{"name"=>"c", "id"=>1}, {"name"=>"y", "id"=>3}]# データ変更
Main::User.update_all("name='X0'", "name='x'")
Sub::User.update_all("name='Y0'", "name='y'")
# データの確認
p Main::User.find(:all).map{|c| c.attributes} #=> [{"name"=>"a", "id"=>1}, {"name"=>"X0", "id"=>3}]
p Sub::User.find(:all).map{|c| c.attributes} #=> [{"name"=>"c", "id"=>1}, {"name"=>"Y0", "id"=>3}]
xfy/xvcd から ruby のActiveRecord (magic_multi_connestions なども含む) を利用して DB 利用するのは有用と思う。
どんなプラグインで具体的に利用できるかを考えてみたい。
« ピックアップ:XLinkの死, 持ち運べるMac OSXを作成, etc... | トップページ | 知らずに食べるな!「中国産」 »
この記事へのコメントは終了しました。
« ピックアップ:XLinkの死, 持ち運べるMac OSXを作成, etc... | トップページ | 知らずに食べるな!「中国産」 »
コメント