我有一个包含 950 行的 CSV,我使用以下控制器代码通过 Rails 将其导入 Postgres:
io = params[:file]
trade_plans = []
CSV.foreach(io.tempfile, { :col_sep => "|" }) do |row|
if row.length == 16
trade_plans << create_trade_plan(row)
end
end
TradePlan.create(trade_plans)
def create_trade_plan(row)
number_of_shares = row[10].to_i.abs
return {
:user_id => current_user.id,
:symbol => row[2].upcase,
:symbol_long_name => row[3].upcase,
:direction => STYPE_MAP[row[5]][1],
:number_of_shares => number_of_shares,
:description => "Trade #{row[1]} on #{format_datetime(row[7], row[8])}",
:trade_status => 'closed',
:is_potential => false,
:planned_entry_price => 0,
:planned_target_price => 0,
:planned_stop_loss_price => 0,
:without_trade_plan => true
}
end
我正在使用activerecord的批量create
方法,尽管从这个答案看来Postgres不支持批量插入......无论如何,我想知道的是我的Rails日志给了我这个:
Completed 200 OK in 315855ms (Views: 1280.1ms | ActiveRecord: 3341.2ms)
如果 AR 只有 3.3 秒,那么 950 行的导入如何花费 315 秒?有一些回调和一些验证,但这对我来说似乎很多。每条记录 0.33 秒是一个合理的预期吗?