image

  • フォト Amazonギフト券
    ※この時計の時刻は、閲覧しているパソコンのものであり、必ずしも正確な時間とは限りません

検索

最近のトラックバック

無料ブログはココログ

« ピックアップ:XLinkの死, 持ち運べるMac OSXを作成, etc... | トップページ | 知らずに食べるな!「中国産」 »

2007-10-21

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/1179164848

require "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 = false

module Main
  establish_connection :db1
end

module Sub
  establish_connection :db2
end

class 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... | トップページ | 知らずに食べるな!「中国産」 »

コメント

コメントを書く

(ウェブ上には掲載しません)

トラックバック

この記事のトラックバックURL:
http://app.cocolog-nifty.com/t/trackback/184434/16824797

この記事へのトラックバック一覧です: magic_multi_connections を試してみた:

« ピックアップ:XLinkの死, 持ち運べるMac OSXを作成, etc... | トップページ | 知らずに食べるな!「中国産」 »

mokuji

2013年12月
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31        

google

  • twitter
  • __
  • _
    Googleボットチェッカー

合わせて読む

  • 合わせて読む
    フィードメーター - katoy: cocolog あわせて読みたい

リンク