Ruby – Sequel Model访问多个数据库
我正在尝试将
Ruby Sequel :: Model ORM功能用于Web服务,其中每个用户的数据都存储在一个单独的
MySQL数据库中.可能有数千个用户,因此可能有数据库.
在每个Web请求中,我想构建连接字符串以连接到用户的数据,执行工作,然后关闭连接. 使用Sequel时,我可以指定用于特定代码块的数据库: Sequel.connect(:adapter=>'mysql',:host=>'localhost',database=>'test1') do |db| db.do_something() end 这一切都很好,我可以在特定用户的数据库上执行Sequel操作.但是,当使用Sequel :: Model时,当我来做我的数据库操作时,它看起来像这样: Supplier.create(:field1 => 'TEST') 即它不会将db作为参数,因此只使用一些共享数据库配置. 我可以通过两种方式配置数据库模型使用,设置全局数据库变量: DB = Sequel.connect(:adapter=>'mysql',database=>'test1') class Supplier < Sequel::Model end 或者,我可以为模型设置数据库: Sequel::Model.db = Sequel.connect(:adapter=>'mysql',database=>'test1') class Supplier < Sequel::Model end 在任何一种情况下,设置这样的共享变量都是不对的 – 可能会同时处理多个请求,每个请求都需要自己的数据库配置. 有没有办法解决?有没有办法使用Sequel :: Model指定每个请求的数据库配置? 顺便说一下,我遇到了与DataMapper类似的问题,我现在想知道如果使用Ruby,是否只有一个多租户数据库是唯一的选择,尽管我更愿意避免这种情况,因为它限制可扩展性. 非常感谢解决方案或任何相关讨论. 谢谢 解决方法
实际上在你的情况下,使用arbitrary_servers扩展名可能比分片更好:
DB.with_server(:host=>'hash_host_b',:database=>'backup') do DB.synchronize do # All queries here default to the backup database on hash_host_b end end 看到: (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |