我使用rails和Mysql作为DB。我想使用Mongo从旧系统导入大量历史数据。
我的佣金任务代码是这样的:
threads = []
File.foreach("file.json").each_slice(100) do |lines|
threads << Thread.new {
time = Time.now
lines.each do |line|
json = ... # Parse json
Model.new(json).save!(validate: false)
end
p Time.now.to_f - time.to_f
}
end
我试着用100行的json。每个线程花费10s。 但是当我尝试使用1000行的json时。每个线程花费大约90秒,所有费用大约90秒。
为什么当我用1000行导入json时,每个线程的成本仍为10?
如何加速呢?
答案 0 :(得分:3)
您的瓶颈是数据库,我建议您批量创建模型。
使用active-record-import执行此操作。
示例:
models = []
File.foreach("file.json").each_slice(100) do |lines|
lines.each do |line|
hash = #parse line here
models << Model.new(hash)
end
end
Model.import models