0

次のコントローラーコードを使用して、Rails 経由で Postgres にインポートしている 950 行の CSV があります。

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 秒かかるのはなぜですか? いくつかのコールバックといくつかの検証がありますが、それは私にはたくさんあるようです. 1 レコードあたり 0.33 秒というのは妥当な予想ですか?

4

1 に答える 1

0

Ruby の処理にも時間がかかります。ベンチマークを使用して、コードのどの部分に時間がかかるかを確認します。

于 2013-06-12T04:06:55.633 に答える