我正在迭代一组更新(包括添加、更新和删除)。我目前正在循环播放这些更新,检查它是否存在。如果是,更新信息。如果没有,创建一个记录。
这似乎花费了令人不快的时间。我会说每 2 秒 1 次,可能会稍微快一些。但我还有 60,000 个要处理,而且需要 109 个小时(给予或接受)才能完成。这是不可接受的。
反正有没有更有效地执行此操作?
Update.all.each do |u|
product = Product.find(:all, :conditions => ["product_codes = ?", u.product_codes])
if u.update_type == "Delete"
daap = DeletedProduct.new
daap.product_codes = u.product_codes
daap.date_deleted = timestamp
daap.save
if product.count == 1
product.first.destroy
puts "Product #{ u.product_codes } deleted"
u.destroy
@delete = @delete + 1
elsif product.count > 1
product.each do |pro|
pro.destroy
puts "Product #{ u.product_codes } deleted (UPDATE #{ u.id})"
@delete = @delete + 1
end
u.destroy
else
@notfound.push(u.product_codes)
u.destroy
@delete = @delete + 1
end
elsif u.update_type == "AddOrUpdate"
if product.count == 1
p = Product.first
p.data = u.data
p.last_updated = timestamp
p.save
puts "Product Updated #{ p.product_codes }"
u.destroy
@update = @update + 1
else
p = Product.new
p.product_codes = u.product_codes
p.data = u.data
p.last_updated = timestamp
p.save
puts "Product Added #{ p.product_codes }"
u.destroy
@delete = @delete + 1
end
end
end
编辑:这是需要很长时间的产品查找。有没有办法加快这部分过程?'产品 = Product.find(...'