我想以这样的方式构建我的数据库:某些表(与其他表没有任何关系,因此不需要连接)必须放在单独的mysql数据库上。
我知道每个模型都有establish_connection
属性。
我想做什么:
clientID将确定将从哪个数据库中获取此模型。
我希望以某种方式将这种数据库路由逻辑融入模型逻辑中。
这可能吗?
答案 0 :(得分:7)
您可以使用模型中的establish_connection将单个模型指向不同的数据库。请参阅here for examples。
如果您希望单个模型基于属性访问多个数据库,则可能需要使用数据库分片,例如DataFabric或ShardTheLove。
答案 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
希望这有帮助