rails和multi dbs,使用establish_connection即时路由到正确的数据库?

时间:2010-11-03 14:07:51

标签: ruby-on-rails ruby

我想以这样的方式构建我的数据库:某些表(与其他表没有任何关系,因此不需要连接)必须放在单独的mysql数据库上。

我知道每个模型都有establish_connection属性。

我想做什么:

  1. 我将根据clientID从特定模型中获取10行。
  2. clientID将确定将从哪个数据库中获取此模型。

    我希望以某种方式将这种数据库路由逻辑融入模型逻辑中。

    这可能吗?

3 个答案:

答案 0 :(得分:7)

您可以使用模型中的establish_connection将单个模型指向不同的数据库。请参阅here for examples

如果您希望单个模型基于属性访问多个数据库,则可能需要使用数据库分片,例如DataFabricShardTheLove

答案 1 :(得分:4)

不知道这是否可以帮到你:

https://github.com/brianmario/mysql2

这允许您进行如下连接和请求:

client = Mysql2::Client.new(:host => "localhost", :username => "root")
results = client.query("SELECT * FROM users WHERE group='githubbers'")

答案 2 :(得分:1)

看起来你需要的是'Sharding'支持

不幸的是,ActiveRecord没有内置的功能。在Sharding支持中有很多宝石攻击

宝石“章鱼”看起来很有希望。见https://github.com/tchandy/octopus

注意:我自己没有使用过章鱼

如果您愿意更进一步,我建议续集http://sequel.rubyforge.org/),这是我之前使用的稳定,功能丰富的ORM。

文档非常好。你需要的是http://sequel.rubyforge.org/rdoc/files/doc/sharding_rdoc.html

如果习惯了AR 2.x,可能需要一段时间才能习惯续集。有一个很好的迁移指南。见http://sequel.rubyforge.org/rdoc/files/doc/active_record_rdoc.html

希望这有帮助