Rails:如何跨主/从数据库分割写/读查询

时间:2015-04-04 10:46:01

标签: mysql ruby-on-rails database-performance master-slave octopus

我的网站读取流量很大。比写流量重很多。

为了提高我网站的性能,我想到了主/从数据库配置。

octupus gem似乎提供了我想要的东西,但由于我的应用程序很庞大,我无法通过数百万的源代码行来改变查询分布(将读取查询发送到从属服务器并写入查询主服务器)。

MySQL Proxy似乎是解决此问题的好方法,但因为它是alpha版本,所以我不想使用它。

所以我的问题是在主/从服务器之间拆分读/写查询的最佳方法是什么?

是否可以在不使用rails中的任何gems的情况下拆分读/写查询?

2 个答案:

答案 0 :(得分:9)

我掏出2颗宝石,八达通和马卡拉。我写了一篇比较这2个宝石的博客:https://ypoonawala.wordpress.com/2015/11/15/octopus-vs-makara-read-write-adapters-for-activerecord-2/

在我看来,Makara运作良好并弥补了Octopus的问题。

答案 1 :(得分:3)

使用章鱼gem,您不必更改大部分代码,以使写入查询转到主数据库服务器,读取查询转到从属服务器。

这是一个简单的配置文件,如here所述。

我过去曾尝试过这种做法,效果很好。对我来说唯一的问题是,当奴隶关闭时,它不会将查询“重定向”到主数据库服务器,就像我问here一样。

但是,如果要配置每个单独的查询目标,则需要一些工作。

我建议您开始映射更频繁的查询以及需要更长时间响应的查询。了解这些查询后,您可以单独优化它们。这可能已经解决了部分问题。

如果此后仍需要主从复制,请使用章鱼gem仅更改少数复杂查询的行为。