1

我有一个使用 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。

谢谢

4

0 回答 0