2

[免責事項: 私は Devops の帽子をかぶっていますが、これはフルタイムの帽子でさえありません。私は RoR の帽子を持っていません。最善を尽くしているだけです。]

複数のデータセンターで実行される RoR アプリケーションがあります。MySQL では、データをすべての DC にレプリケートできますが、書き込み可能な MySQL のインスタンスは 1 つだけです。(はい、マスターにレプリケートする手法はありますが、RoR がそれを安全に行うために必要なコントラクトを維持しているとは思いません。おそらく私は間違っています。)

ほとんどの場合、RoR は MySQL から読み取りを行っているため、何かを書き込む必要がある場合を除き、RoR にローカルの MySQL インスタンスを使用するように指示できれば、はるかに高速になります。

あるいは、私が問題を間違って見ていて、これが私が言いたいことだと MySQL に伝えているのかもしれません。(実際、おそらく正しいことは、MySQL Proxy インスタンスもセットアップして、読み取り/書き込み分割を行うように指示することです。)

4

1 に答える 1

0

1 つの解決策は、同じクラスに対して 2 つの異なる接続を作成することです。一方の接続は書き込み可能なデータベースに接続し、もう一方は読み取り可能なデータベースに接続します。

元のデータベース接続クラスを保持しますが、別の読み取り専用クラスを作成すると、2 つの異なるクラスが定義されます。

class Example < ActiveRecord::Base
end

class ReadExample < ActiveRecord::Base
  establish_connection configurations['read_example'][Rails.env]
end

読み取り専用の呼び出しを行う場合は、'Example' を 'ReadExample' に置き換えます。

私はこれをテストしていませんが、うまくいくはずです。唯一の危険は、実際に書き込みを行う呼び出しに「Readable」クラスを配置することです。

于 2016-04-19T16:37:24.393 に答える