我有一個Rails 3應用程序,它在mySQL-DB中有幾百條記錄,每小時需要更新多次。實際更新是通過在控制器邏輯中觸發的delayed_job
來完成的(檢查自上次更新以來是否有足夠的時間,只有這樣纔會發生)。頻繁更新大量記錄
每個更新都很慢,在某些情況下可能需要一秒(儘管平均每秒3-5次更新)。 代碼如下所示:
class Thing < ActiveRecord::Base
...
def self.scheduled_update
Thing.all.each do |t|
...
t.some_property = new_value
t.save
end
end
end
我觀察到後執行攤位300 - 400記錄,然後延遲的工作似乎只是掛起,並最終超時(條目delayed_job.log
)。一段時間後下一個開始,也失敗,等等,所以並非所有的記錄得到更新。
這樣做的正確方法是什麼?
Rails如何像這樣處理數據庫連接?它可能是一些超時問題,沒有檢測/處理正確?
必須有一個默認的方式做到這一點,但無法找到任何至今..
任何幫助表示讚賞。
看看這個,它可以真正幫助加快你的批量更新http://stackoverflow.com/a/2286377/1241447 – jbmeerkat