0

我有一个包含 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 秒是一个合理的预期吗?

4

1 回答 1

0

Ruby 处理也需要时间。使用基准测试来查看代码的哪一部分需要时间。

于 2013-06-12T04:06:55.633 回答