Rails Rails 支持多数据源吗?

wl1991724 · 2015年06月17日 · 最后由 pathbox 回复于 2015年06月25日 · 3483 次阅读

就是同时连接两个数据库。

@peter 怎么配置啊?

这个问题很好,之前我也打算连两个数据库,连两个数据库是可以的。 不过最终还是放弃了,放到一个数据库里。

情景一:业务上的存在一些关联

一方面,业务上的关联性不是早期就能发现全的。越到后期你可能会越发现两个数据库里的数据都是互相依赖的。 这种情况坚决不适合拆成两个数据库。

情景二:业务上的关联确实很小

可以拆成两个项目去做,用 API 或 RabbitMQ 消息进行通信。 这种情况你就不需要连两个数据库了。

结论

不必连两个数据库。 根据我的经验,在连两个关系数据库的过程中,诸多不爽!建议放弃。 最大的阻力可能来自团队的其他成员,如果你自己认为正确,请顶住他们的压力。

@gazeldx 额,数据库已经是现成的,没法改变了,怎么连两个数据库能告诉我吗?

可以看看我这个两年前的帖

可以连,还可以连接到不同的数据库。我之前有一个项目一个 Rails 同时连接到 Postgres,MongoDB 和 Redis

一般是通过设置 database.yml 文件,比如


# 默认的
development:
    *****
#其他的
other_name_development:
    ******

在 model 里面

class Post < ActiveRecord::Base
  self.establish_connection "other_name_#{Rails.env}".to_sym
  self.table_name = "posts" # 可选
  self.inheritance_column = nil # 可选

end

这个你就可以正常链接另外一个数据库了,和正常使用 rails 的 model 一样。但是如果两个数据库表名是一样,你就需要另外取名,指定表名。

http://technology.customink.com/blog/2015/06/22/rails-multi-database-best-practices-roundup/ 这里有一点点东西,不过还是建议用三楼的方案,rabbitmq 靠谱。

楼主可以看看这个Rails Multi-Database Best Practices Roundup

文章涉及:

  • 连接管理
  • 查询缓存
  • active record rollback exception
  • transaction
  • 共享连接池

我自己是没细读了,目前没这类需求 😃

MySQL+redis 基本都够用了

需要 登录 后方可回复, 如果你还没有账号请 注册新账号