Rails - 大型数据库查询

时间:2015-09-20 15:14:23

标签: ruby-on-rails .net ruby database postgresql

假设我需要为产品目录数据库实现搜索算法。这将包括产品表,制造商表,库存表等的多个连接。

在.NET / MSSQL中,我会在数据库存储过程中隔离这样的逻辑,然后在我的.NET应用程序的数据访问层中编写一个包装器方法来简单地调用这个存储过程。

这样的事情在RoR中如何运作?根据我的基本理解,RoR默认使用其ORM。这是否意味着,我必须将我的搜索逻辑移动到应用程序层,并使用其ORM编写它? SQL存储过程非常激烈......对于性能,它需要在存​​储过程中。

这在RoR中如何运作?

编辑:从前两个回复中,我认为ActiveRecord是在Ruby中做事的方式。这是否意味着需要使用ActiveRecord类重新编写需要大量复杂查询以及大量连接,过滤甚至动态SQL的应用程序?

谢谢!

1 个答案:

答案 0 :(得分:1)

虽然可以在Rails中运行原始SQL语句,但在connection对象上使用execute方法,这样做会损失ActiveRecord的所有好处。如果您仍想沿着这条路走下去,可以这样使用它:

ActiveRecord::Base.connection.execute("call stored_procedure_name")

探索的另一个选择可能是创建一个“查询对象”来封装您的查询逻辑。在里面,你仍然可以使用ActiveRecord查询方法。 ActiveRecord已经非常精通优化您的SQL查询,并且您仍然可以进行一些手动调整。

下面是这样一个对象的简单脚手架:

# app/queries/search_products.rb

class SearchProducts
  def initialize(params)
    @search = search
  end

  def call
    Product.where(...) # Plus additional search logic
  end
end

第三种选择是选择elasticsearch-railssunspot。这将需要一些额外的设置时间和增加的复杂性,但如果您的搜索要求发生变化,可能需要付出代价。