连接到多个数据库的Extensible Rails应用程序

时间:2010-06-20 10:15:25

标签: ruby-on-rails design-patterns activerecord ruby-on-rails-plugins

我正在实现一个Rails应用程序,需要聚合来自N个独立异构数据库的搜索结果。一个示例用例是:

  • 用户查询“xpto”
  • 查询将提交给系统上注册的所有数据库
  • 结果以预定义格式转换和组合
  • 用户获得结果

应用程序需要为在系统中引入新数据库提供扩展点。这里的数据库可以是不同的类型 - 平面文件,SQL数据库,SQL数据库的REST接口等等。

如果我在C#/ Java中工作,忽略速度问题,我会定义一个插件管理系统,其中每个主机都有一个插件,知道如何查询和转换主机的结果。通过定义新插件并在系统中配置主机,可以轻松引入新主机。

我是rails的新手,我正在寻找可以帮助我解决这个问题的想法,工具或设计模式。

2 个答案:

答案 0 :(得分:0)

我最好的猜测是编写一个自定义ActiveRecord适配器,它将查询所有数据库并合并结果。

答案 1 :(得分:0)

来自API参考:

连接通常通过ActiveRecord :: Base.establish_connection创建,并由ActiveRecord :: Base.connection检索。从ActiveRecord :: Base继承的所有类都将使用此连接。但您也可以设置特定于类的连接。例如,如果Course是ActiveRecord :: Base,但驻留在不同的数据库中,您可以说Course.establish_connection和Course及其所有子类将使用此连接。