[英]Rails - Large database queries
假設我需要為產品目錄數據庫實現一個搜索算法。 這將包括跨產品表、制造商表、庫存表等的多個連接。
在 .NET/MSSQL 中,我會在 DB 存儲過程中隔離這種邏輯,然后在我的 .NET 應用程序的數據訪問層中編寫一個包裝方法來簡單地調用這個存儲過程。
像這樣的東西在 RoR 中是如何工作的? 根據我的基本理解,RoR 默認使用其 ORM。 這是否意味着,我必須將我的搜索邏輯移到應用程序層,並使用其 ORM 編寫它? SQL 存儲過程非常激烈......為了性能,它需要在存儲過程中。
這在 RoR 中是如何工作的?
編輯:從前兩個回復中,我認為 ActiveRecord 是在 Ruby 中做事的方式。 這是否意味着可以(應該)使用 ActiveRecord 類重寫需要具有大量連接、過濾甚至動態 SQL 的大型復雜查詢的應用程序?
謝謝!
雖然可以在 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-rails或sunspot 之類的東西。 這將需要一些額外的設置時間並增加復雜性,但如果您的搜索要求發生變化,可能會有所回報。
存儲過程是使應用程序有時可以更快的方法之一,但它需要高成本和時間來為開發人員調試代碼。 Rails 使用的是ActiveRecord
ORM,所以如果要使用存儲過程,會導致主函數 ActiveRecord 未使用好。
有一些關於 rails storage-procedures-in-ruby-on-rails和使用存儲過程的解釋
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.