我有一個列表模型下面,它有一個has_and_belongs_to_many與收件人關聯。方法make_recipient_lists
的目的是以這種格式[[num1],[num2],[num3]...]
保存解析的csv numbers
(初始參數)。Rails模型優化
add_recipients
通過查找現有收件人然後將其添加到列表或創建新的收件人的工作。
整個過程對於28分鐘的小數量,20k數字來說效果很好。然而,數字越大,指數性所需的時間越長,70k花了14小時。可能是因爲它正在檢查緩存的重複項current_lists
。
問題是,有什麼辦法可以讓這個更快嗎?我可能接近這個問題是錯誤的。謝謝!
class List < ActiveRecord::Base
#other methods above
def make_recipient_lists(numbers,options)
rejected_numbers = []
account = self.user.account
#caching recipients
current_recipients = self.recipients
numbers.each do |num|
add_recipient(num[0], current_recipients)
end
end
def add_recipient(num, current_recipients)
account = self.user.account
recipient = current_recipients.where(number:num, account_id: account.id).first
recipient ||= current_recipients.create!(number:num, account_id: account.id)
recipient
end
end
嗨@Neo,我打算在一段時間嘗試一下,但它看起來很有希望。謝謝。 –
在代碼中添加了很多,但這對我有很大的幫助。謝謝@Neo! –