我有一个使用 2 个数据库(比如 DB1、DB2)的 rails 应用程序。DB1 也复制到 DB3,DB2 复制到 DB4。我正在使用章鱼 gem 进行复制,即所有写入操作都在 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
我还在我的模型中使用 'octopus_establish_connection' 连接到 DB2
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。
谢谢