在对Postgres进行Rails CSV导入时需要花费多少时间?

时间:2013-06-12 03:55:03

标签: ruby-on-rails postgresql csv

我有一个包含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方法,但是从this answer开始,Postgres似乎不支持批量插入...无论如何,我想知道的是我的Rails日志给我这个:

Completed 200 OK in 315855ms (Views: 1280.1ms | ActiveRecord: 3341.2ms)

如果只有3.3秒的AR,那么950行的导入需要315秒?有一些回调和一些验证,但这对我来说似乎很多。每条记录0.33秒是合理的预期吗?

1 个答案:

答案 0 :(得分:0)

Ruby处理也需要时间。使用benchmarking查看代码的哪一部分需要时间。