ar-octopus
Railsは、標準では基本的にDBひとつの構成で動く作りになっている。
大規模サイトなどで、DBの負荷も高く、DBを分割しないといけなくなった場合に
Railsの標準構成では難しくなってくる。
そこで、ar-octopus を使う。
これは、更新系の処理はマスターに接続し、参照系の処理はスレイブを参照するように設定できる。
ホームページ
Rails 3とRails 2.3.*に対応
インストール
Gemfileに
gem 'ar-octopus', :require => 'octopus'
を追加して
bundle install
実行
使い方
コンフィグファイルを設定
コンフィグファイルの場所は
#config/shards.yml
で、基本的な設定内容は
octopus:
environments:
- development
- production
development:
master:
host: localhost
adapter: mysql
database: app_development
slave:
host: localhost
adapter: mysql
database: app_development
production:
master:
host: localhost
adapter: mysql
database: app_production_master
slave:
host: localhost
adapter: mysql
database: app_production_slave
※詳しいshards.ymlファイルの設定方法はこちら
usingを使うと、データベースを切り替えることが出来る
以下の場合、Userのfindクエリーの接続先はslaveとなる
User.where(:name => "Thiago").limit(3).using(:slave)
ブロックにすることで、ブロック内でのクエリーを一括して指定することが出来る
Octopus.using(:slave) do User.create(:name => "Mike") end
マイグレーションを実行するデータベースを指定する
class CreateUsersOnBothShards < ActiveRecord::Migration
using(:master, :slave)
def self.up
User.create!(:name => "Both")
end
def self.down
User.delete_all
end
end
レプリケーションの場合
#config/shards.yml ファイルを以下のようにする
octopus:
replicated: true
production:
slave1:
adapter: mysql
host: localhost
database: octopus_shard2
slave2:
adapter: mysql
host: localhost
database: octopus_shard3
slave3:
adapter: mysql
host: localhost
database: octopus_shard4
slave4:
adapter: mysql
host: localhost
database: octopus_shard5
replicated: true を設定した場合、database.ymlに設定したものがマスターになる。

