0

我有一个包含数千行的 excel 文件。就我而言,我不能使用批量插入,因为对于每一行我应该创建一些关联。现在,20k 行的所有过程都需要 1 个多小时,这简直是地狱。解决此问题的最佳方法是什么?

我正在使用电子表格 gem

4

1 回答 1

4

这类似于 Rails 喜欢遇到的臭名昭著的“1+N”查询情况。我有类似的情况(导入具有多个关联的 20k+ 行的文件)。我优化此过程的方式是为关联预加载哈希。因此,例如,如果您有一个AssociatedModel包含lookup_column在您的导入数据中的 a,您将首先构建一个哈希:

associated_model_hash = Hash.new(:not_found)

AssociatedModel.each do |item|
  associated_model_hash[item.lookup_column] = item
end

这提供了对象的散列。您可以重复尽可能多的关联。在您的导入循环中:

associated_model = associated_model_hash[row[:lookup_column]]
new_item.associated_model_id = associated_model.id

因为您不必每次都在数据库上进行搜索,所以速度要快得多。它还应该允许您使用批量插入(假设您可以保证关联的模型在加载过程中不会被删除或以错误的方式修改)。

于 2013-05-08T07:17:25.040 回答