Tom*_*man 3 database sharding ruby-on-rails ruby-on-rails-2
Heroku 的数据库关注者非常酷。它们允许您创建一个单独的数据库,自动与您的主数据库保持同步。
我想使用这种技术来访问我的追随者数据库而不是我的主数据库以进行昂贵的读取操作(但显然我总是想写入我的主数据库)
当我在生产环境中时,是否可以访问两个数据库(写入的主数据库和读取的跟随数据库)?我理想的 API 应该是类似Post.use_db(:follower).find(1)或Post.find(1, :use_db => :follower)?
DbCharmer 已被暂停
在过去的 2 年中(在尝试使 DbCharmer 与 Rails 4.0 兼容的同时),它变得越来越明显,我根本不想再这样做了。我不需要 DbCharmer 来支持 Rails 4.0+,虽然很明显很多用户需要它并且不断在问题和邮件列表中唠叨,要求更新给我带来了很多焦虑,焦虑我无能为力关于(最坏的那种)。结果,因为我根本看不出有什么好的理由继续打这场艰苦的战斗(并且为 ActiveRecord 开发这样的东西是一场持久战!)我正式放弃了。阅读更多
Makara 可能是另一种选择:github.com/taskrabbit/makara
原答案
据我所知,Rails 没有开箱即用地提供此功能。但是,我发现了一个名为db-charmer的 gem ,它似乎与您要查找的内容非常接近。
这是最好的部分(每个查询连接管理):
有时,您知道要在主服务器上运行的选择查询。例如,当您刚刚添加了一些数据并需要将其读回并且不确定它是否一直发送到从站时,可能会发生这种情况。对于这种情况和其他一些情况,我们已将一组方法添加到 ActiveRecord 模型中:
User.on_master.find_by_activation_code(code)
on_slave - 此方法用于强制查询在从站上运行,即使在之前被迫使用主站的情况下也是如此。如果有多个从属设备,则会随机选择一个。Tis 方法也有两种形式:块和代理。
on_db(connection) - 这种方法使前两种方法成为可能。它用于将模型的连接切换到某个数据库以获取一小段代码甚至一个语句(两种形式)。它接受与 switch_connection_to 方法相同的值范围。例子:
Comment.on_db(:olap).count
Post.on_db(:foo).find(:first)