我需要什麼:ActiveRecord在事務中執行批量插入/刪除操作嗎?
- 保證(無記錄可被處理2次)
- 所有1000行批量刪除所選
@queue = Queue.where("col = 1").limit(1000)
ids = []
@queue.each do |row|
Queue.do_something(row)
ids << row.id
end
Queue.delete_all("id in (#{ids.join(',')}) ")
是一樣的原子更新
Queue.transaction do
@queue.each do |row|
Queue.do_something(row)
Queue.delete(row.id)
end
end
在我的情況下,我需要刪除記錄,同時確保沒有其他進程/實例將處理相同的記錄。我使用mysql「FOR UPDATE」SQL子句來鎖定選定的記錄並使用ActiveRecord事務,因爲我認爲ActiveRecord會將這些刪除作爲單個批量刪除sql執行或者更快地執行。 – newx 2011-05-07 18:24:31
問題是我的電子郵件(在QUEUE上的記錄)交付了兩次 – newx 2011-05-07 18:25:14
使用您的解決方案時,它確實獲得了更快的速度......謝謝! :-) – 2012-09-15 10:16:03