1

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 は照会される必要があります。

ありがとう

4

0 に答える 0