0

我正在迭代一组更新(包括添加、更新和删除)。我目前正在循环播放这些更新,检查它是否存在。如果是,更新信息。如果没有,创建一个记录。

这似乎花费了令人不快的时间。我会说每 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(...'

4

0 回答 0