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