簡體   English   中英

在一次調用/查詢中創建多個 Rails ActiveRecord 記錄

[英]Create multiple Rails ActiveRecord records in one call/query

在我的一個 Rails 應用程序的 AR 類中,我得到了許多新初始化的 ActiveRecord 對象的數組。

我希望能夠以一種有效的方式將它們保存到數據庫中,理想情況下,在一個方法調用中。 目前,我將它們包裹在交易中。

就像是:

Object.transaction do
  @objects.map(&:save)
end

是否有更有效的解決方案來創建/更新記錄數組?

將所有內容包裝到事務中是正確的,因為這樣數據庫只會刷新和更新索引一次。

您不能在標准 SQL 的單個 SQL 語句中插入多個對象。 MySQL 可以做到這一點,但這不是默認的。 我懷疑這是否有巨大的性能優勢。

如果此代碼確實對時間很關鍵,您可以異步運行它(通過將其移動到后台線程 - 請注意 ActiveRecord 和多線程存在問題 - 或者讓它由工作人員執行。或者您可以手動生成 SQL - AR 在這方面並不是非常有效。但是,我會 go 只有在這非常關鍵的情況下才會這樣做並且會認為這是一種黑客行為。

我建議使用activerecord-import gem,直到主線 activerecord 支持批量插入。

使用起來相當簡單,例如批量插入一堆“評級”記錄:

# Example database record/model
class Rating < ActiveRecord::Base

end

ratings = []

# Create some fake data here..
100.times do |i|
    ratings << Rating.new({ stars: (rand * 5).to_i }) # random star rating
end

# Bulk import ratings (single query)
Rating.import(ratings) 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM