2

[免责声明:我戴着我的 devops 帽子,这甚至不是我的全职帽子。我没有RoR帽子,我只是尽力而为。]

我有一个在多个数据中心运行的 RoR 应用程序。MySQL 允许我将数据复制到所有 DC,但只有一个 MySQL 实例是可写的。(是的,有一些技术可以复制回主人,但我不相信 RoR 维护必要的合同来安全地做到这一点。也许我错了。)

大多数时候,RoR 都是从 MySQL 读取数据,所以如果我可以告诉 RoR 使用本地 MySQL 实例,除非它需要写东西,否则会快得多。

或者也许我看错了问题,我可以告诉 MySQL 这就是我的意思。(实际上,也许正确的做法是设置一个 MySQL Proxy 实例并告诉进行读/写拆分。)

4

1 回答 1

0

一种解决方案是为同一个类创建两个不同的连接,一个连接将连接到您的可写数据库,另一个连接到您的可读数据库。

保留您原来的数据库连接类,然后创建另一个只读类,因此您将定义两个不同的类:

class Example < ActiveRecord::Base
end

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

无论您想在哪里进行只读调用,请将“Example”替换为“ReadExample”。

我没有对此进行测试,但我认为它应该可以工作。唯一的危险是将“可读”类放在实际写入的调用上。

于 2016-04-19T16:37:24.393 回答