【发布时间】:2014-02-11 15:45:53
【问题描述】:
我正在尝试将 Ruby Sequel::Model ORM 功能用于 Web 服务,其中每个用户的数据都存储在单独的 MySQL 数据库中。可能有成千上万的用户和数据库。
在每个网络请求上,我都想构造连接字符串以连接到用户的数据,完成工作,然后关闭连接。
使用 Sequel 时,我可以为特定代码块指定要使用的数据库:
Sequel.connect(:adapter=>'mysql', :host=>'localhost', database=>'test1') do |db|
db.do_something()
end
这一切都很好,我可以对特定用户的数据库执行 Sequel 操作。但是,当使用Sequel::Model 时,当我来执行我的数据库操作时,它看起来像这样:
Supplier.create(:field1 => 'TEST')
即它不采用db 作为参数,所以只使用一些共享数据库配置。
我可以通过两种方式配置 Model 使用的数据库,或者设置全局 DB 变量:
DB = Sequel.connect(:adapter=>'mysql', :host=>'localhost', database=>'test1')
class Supplier < Sequel::Model
end
或者,我可以只为模型设置数据库:
Sequel::Model.db = Sequel.connect(:adapter=>'mysql', :host=>'localhost', database=>'test1')
class Supplier < Sequel::Model
end
在任何一种情况下,像这样设置共享变量都不好 - 可能会同时处理多个请求,每个请求都需要自己的数据库配置。
有没有办法解决这个问题?有没有办法使用Sequel::Model 指定每个请求的数据库配置?
顺便说一句,我在使用 DataMapper 时遇到了类似的问题,我现在想知道如果使用 Ruby,是否只有一个多租户数据库是唯一的选择,尽管我更愿意避免这种情况因为它限制了可扩展性。
非常感谢您提供解决方案或任何相关讨论。
谢谢 皮特
【问题讨论】:
标签: ruby sequel multiple-databases