如何在Rails中同时向两个数据库发送SQL查询?

时间:2018-03-23 04:58:54

标签: ruby-on-rails postgresql

我有一个非常高流量的Rails应用。我们使用较旧版本的PostgreSQL作为我们需要升级的后端数据库。我们不能使用数据目录复制方法,因为我们现有的版本和当前的PostgreSQL版本(编写本文时为10.x)之间的数据文件格式发生了太大的变化。我们也无法使用转储还原过程进行迁移,因为我们要么会导致几个小时的停机时间,要么会丢失重要的客户数据。由于两个数据库版本不兼容,因此无法进行复制。

到目前为止,策略是拥有两个数据库并将所有数据(和函数)从现有安装复制到新安装。然而,当副本发生时,我们需要到达后端的数据到达两个服务器,这样一旦数据迁移完成,交换机就会重新部署代码。

我已经弄清楚了这个难题的其他部分,但我无法确定如何将Rails应用程序上发生的所有写入发送到两个数据库服务器。

如果两个安装都被查询到向用户显示数据(我可以丢弃来自新安装的数据),我不会感到困扰;所以,如果在驱动程序级别上可行,或者在ActiveRecord中的某处添加一行,我就可以了。

PS:Rails版本是4.1,该公司不打算升级它。

1 个答案:

答案 0 :(得分:1)

通过为database.yml文件添加env,您可以拥有多个数据库。之后,您可以拥有一个单独的类Like ActiveRecordBase并将其连接到新的env。

have a look at this post

但是,正如我所看到的,这不会解决您的问题。从旧数据库复制时将新数据重定向到新数据库可能会导致数据不一致。

例如,由于两个数据源提要,可以更改记录的ID。

如果您要升级数据库,我建议您定义一个计划停机时间,并提前告知您的用户。我想说,停机时间比固定不稳定的数据要好得多。

当您遇到停机时,

  • 让客户提前了解
  • 将停机时间保持在最低限度
  • 有一个备份程序,即使新网站需要的时间比您想象的要长,也会回滚到旧网站。