我有一个包含数千行的excel文件。在我的情况下,我不能使用批量插入,因为对于每一行,我应该创建很少的关联。现在,所有过程需要超过1小时,行数为20k,这是地狱。解决此问题的最佳方法是什么?
我正在使用电子表格宝石。
答案 0 :(得分:4)
这类似于Rails喜欢遇到的臭名昭着的“1 + N”查询情况。我有类似的情况(导入20k +行与多个关联的文件)。我优化此过程的方法是为关联预加载哈希。例如,如果您的导入数据中包含AssociatedModel
lookup_column
,则首先要构建哈希:
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
因为您不必每次都对数据库进行搜索,所以速度要快得多。它还应该允许您使用批量插入(假设您可以保证在加载期间不会以错误的方式删除或修改关联的模型)。