RubyonRails和一个复制的MySQL实例
[免责声明:我戴着我的devops帽子,它甚至不是我的全职帽子。我没有RoR帽子,我只是尽我所能。] 我有一个在多个数据中心运行的RoR应用程序。MySQL允许我将数据复制到所有DC,但只有一个MySQL实例是可写的。(是的,有一些技术可以复制回主机,但我不相信RoR会维护必要的合同来安全地完成这项工作。也许我错了。) 大多数情况下,RoR都是从MySQL中读取数据的,所以如果我能告诉RoR使用本地MySQL实例,速度会快得多,除非它需要编写一些东西RubyonRails和一个复制的MySQL实例,mysql,ruby-on-rails,mysql-proxy,Mysql,Ruby On Rails,Mysql Proxy,[免责声明:我戴着我的devops帽子,它甚至不是我的全职帽子。我没有RoR帽子,我只是尽我所能。] 我有一个在多个数据中心运行的RoR应用程序。MySQL允许我将数据复制到所有DC,但只有一个MySQL实例是可写的。(是的,有一些技术可以复制回主机,但我不相信RoR会维护必要的合同来安全地完成这项工作。也许我错了。) 大多数情况下,RoR都是从MySQL中读取数据的,所以如果我能告诉RoR使用本地MySQL实例,速度会快得多,除非它需要编写一些东西 或者,也许我没有正确地看待这个问题,我可以告
或者,也许我没有正确地看待这个问题,我可以告诉MySQL这就是我的意思。(事实上,也许正确的做法是设置一个MySQL代理实例,并告诉它进行读/写拆分。)一个解决方案是为同一个类创建两个不同的连接,一个连接将连接到可写数据库,另一个连接到可读数据库 保留原始db connection类,然后创建另一个只读类,以便定义两个不同的类:
class Example < ActiveRecord::Base
end
class ReadExample < ActiveRecord::Base
establish_connection configurations['read_example'][Rails.env]
end
类示例
无论您想在何处进行只读调用,请将“Example”替换为“ReadExample”
我还没有测试过这个,但我认为它应该可以工作。唯一的危险是将“Readable”类放在一个实际写入的调用上。这看起来像是做了您需要的事情。