【发布时间】:2015-08-02 09:39:39
【问题描述】:
我有多个数据库,里面有相同的表和列名(但不同的唯一 ID 和行..)。它不是拥有一个包含所有行的庞大数据库,而是拆分为不同的数据库。这是我无法改变的(你可以认为这是从不同国家收集相同的数据,但每个国家都有自己的数据库)。 这些数据库是“只读的”——这意味着,当我通过 Rails 使用它们时,它只是为了显示数据(或将其保存在本地数据库中)——我不会更改任何远程数据库上的数据。
我的问题是,我需要在 rails 中有 1 个模型,用于从所有这些数据库中收集数据。我们希望能够执行以下操作:
OneModelAllDB.select_where(...)
并且不要将每个搜索拆分为:
data1 = FirstDBModel.select_where(same_condition)
data2 = SecondDBModel.select_where(same_condition)
...
data = data1 + data2 + ...
另外,如果我想用线程(并行搜索)制作 1 个模型,就会出现问题:
[:db1, :db2].each do |db|
threads << Thread.new do
self.establish_connection(db)
results[db] = self.where(bla_bla_condition)
end
end
因为修改连接不是线程安全的……
有什么办法吗?由于我们不会更改这些数据库中的任何一个,并且每一行都有一个唯一的 id,因此从不同的数据库中获取数据并将它们连接在一起应该没有任何问题......
谢谢!
【问题讨论】:
-
如果您希望它像一个大数据库一样运行而不实际更改结构,您需要在模型中编写自己的多数据库访问方法,以执行我在回答中显示的操作。 (模型一次只能访问一个实际的数据库。)然后在代码的其他地方你可以引用新方法。
标签: ruby-on-rails database ruby-on-rails-3 model