Rails:如何在 master/slave 数据库中拆分 write/read 查询

Rails: How to split write/read query across master/slave database

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

为了提高我网站的性能,我考虑过 master/slave 数据库配置。

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

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

所以我的问题是在 master/slave 服务器上拆分 read/write 查询的最佳方式是什么?

是否可以拆分 read/write 查询而不使用 rails 中的任何 gem?

使用章鱼 gem,您无需更改太多代码即可将写入查询发送到主数据库服务器并将读取查询发送到从服务器。

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

我过去试过这个,效果很好。对我来说唯一的问题是,当从服务器关闭时,它不会 "redirect" 查询到主数据库服务器,正如我所问的 here.

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

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

如果在那之后你仍然需要主从复制,使用章鱼gem只改变那些少数复杂查询的行为。

我挖出了 2 颗宝石,章鱼和玛卡拉。我写了一篇博客比较这 2 颗宝石:https://ypoonawala.wordpress.com/2015/11/15/octopus-vs-makara-read-write-adapters-for-activerecord-2/

在我看来,Makara 很好用,弥补了 Octopus 的问题。