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に設定したものがマスターになる。