将数据从CSV插入MySQL数据库非常慢

时间:2015-10-23 13:38:11

标签: mysql ruby performance

尝试使用Ruby将CSV文件中的数据插入MySQL数据库,速度非常慢。请注意,这不是Rails应用程序,只是独立的Ruby脚本。

这是我的代码:

def add_record (data1, data2, time)
    date = DateTime.strptime(time, "%m/%d/%y %H:%M")
    <my table>.create(data1: data1, data2: data2, time: date)
end

def parse_file (file)
    path = @folder + "\\" + file
    CSV.foreach(path, {headers: :first_row}) do |line|
        add_record(line[4], line[5], line[0])
    end
end

def analyze_data ()
    Dir.foreach @folder do |file|
        next if file == '.' or file == '..'
        parse_file file
    end     
end

我的联系:

@connection = ActiveRecord::Base.establish_connection(  
  :adapter=> "mysql2",  
  :host => "localhost",  
  :database=> <db>,
  :username => "root",
  :password => <pw>
)

任何帮助表示感谢。

2 个答案:

答案 0 :(得分:0)

使用zdennis/activerecord-import gem。你可以快速插入吨记录。

答案 1 :(得分:0)

使用Load Data Infile

这是一篇关于性能和战略的好文章,标题为Testing the Fastest Way to Import a Table into MySQL。不要让标题的mysql版本或文章内部吓跑你。跳到最底层并得出一些结论:

  

您可以在不使用raw的情况下将表导入MySQL的最快方法   files是LOAD DATA语法。使用InnoDB的并行化   更好的结果,并记得调整像你的基本参数   事务日志大小和缓冲池。精心编程和   导入可以使> 2小时的问题成为一个2分钟的过程。您   可暂时禁用某些安全功能以获得额外性能

你可能会发现你的时间大大减少了。