2 つのデータベース (DB1、DB2 など) を使用する Rails アプリがあります。また、DB1 は DB3 に複製され、DB2 は DB4 に複製されます。レプリケーションにタコの宝石を使用しています。つまり、すべての書き込み操作は DB1 で行われ、DB3 からの読み取り操作が行われます。
以下はdatabase.ymlの私の設定です
production:
adapter: mysql2
database: DB1
username: root
host: localhost
password: root
pool: 5
timeout: 5000
reconnect: true
DB2_production:
adapter: mysql2
database: DB2
username: root
host: localhost
password: root
pool: 5
timeout: 5000
reconnect: true
今、次のようなファイル shards.yml があります
octopus:
replicated: true
environments:
- production
- DB2_production
production:
slave1:
adapter: mysql2
database: DB3
username: root
host: localhost
password: root
pool: 5
timeout: 5000
reconnect: true
DB2_production:
slave2:
adapter: mysql2
database: DB4
username: root
host: localhost
password: root
pool: 5
timeout: 5000
reconnect: true
また、モデルで DB2 に接続するために「octopus_ Establish_connection 」を使用しています
class MyModel1 < ActiveRecord::Base
octopus_establish_connection "DB2_#{Rails.env.to_s}"
end
class MyModel2 < ActiveRecord::Base
octopus_establish_connection "DB2_#{Rails.env.to_s}"
end
ここで、MyModel1 からの読み取りクエリがある場合は DB3 がクエリされ、書き込みクエリの場合は DB1 がクエリされます。ただし、どちらの場合も MyModel2 では DB2 が照会されますが、DB4 は照会される必要があります。
ありがとう