1
我有一些rake腳本可以處理數十萬個項目的集合。Rails:使用大型集合
通常,我的服務器內存不足,腳本崩潰。我認爲,這是因爲我的代碼看起來是這樣的:
Asset.where(:archived => false).each { |asset| asset.action! }
據我所知,通過Rails的每個實例獲取整個集合到內存中,然後進行迭代。
我的服務器似乎並沒有成爲Asset
快樂裝載300000個實例一次,所以爲了減少對內存的要求,我不得不求助於這樣的事情:
collection = Asset.where(:archived => false) # ActiveRecord::Relation
while collection.count > 0
collection.limit(1000).each { |asset| asset.action! }
end
不幸的是,看起來不太乾淨。當動作沒有從集合中移除項目時,情況變得更糟,我也必須跟蹤offset
。有沒有人有更好的方式來分區數據或保持關係更長的建議,只有根據需要加載行?
完美。謝謝! – Jeriko 2011-04-29 13:36:14