从rails app将csv导入多个mysql数据库

时间:2013-11-12 09:44:11

标签: mysql ruby-on-rails-3 csv resque sidekiq

我有一个包含78,000条记录的CSV文件。我使用smarter_csv(https://github.com/tilo/smarter_csv)来解析csv文件。我想从我的rails应用程序导入到MySQL数据库。我有以下两个问题

  1. 从我的rails应用程序中快速将如此大的数据集导入MySQL的最佳方法是什么?使用resque或sidekiq来创建多个工作人员是一个好主意吗?

  2. 我需要将此数据插入到多个数据库中的给定表中。在Rails中,我只与一个数据库进行模型对话。那么我如何扩展解决方案以与我的模型中的多个mysql数据库进行对话?

  3. 谢谢

2 个答案:

答案 0 :(得分:1)

性能方面可能最好的方法是使用MYSQL的LOAD DATA INFILE语法并在每个数据库上执行import命令。这要求数据文件对每个数据库实例都是本地的。

正如另一个答案所示,mysqlimport可用于简化导入,因为LOAD DATA INFILE语句语法可高度自定义,并且可以处理许多数据格式。

答案 1 :(得分:1)

一种方法是使用数据库应用程序本身的本机接口进行导入和导出;它会针对特定目的进行优化。

对于MySQL,mysqlimport提供该接口。请注意,导入也可以作为SQL语句完成,并且此可执行文件为底层SQL命令提供了更加安全的接口。

就实施情况而言,如果这是经常进行的导入练习,则sidekiq / resque / cron作业是最好的方法。

[编辑]

上面提到的SQL命令是LOAD DATA INFILE,正如其他答案所指出的那样。