【问题标题】:Importing csv into multiple mysql databases from rails app从 Rails 应用程序将 csv 导入多个 mysql 数据库
【发布时间】:2013-11-12 17:57:11
【问题描述】:
我有一个包含 78,000 条记录的 CSV 文件。我正在使用 smarter_csv (https://github.com/tilo/smarter_csv) 来解析 csv 文件。我想从我的 Rails 应用程序将其导入 MySQL 数据库。我有以下两个问题
从我的 Rails 应用程序快速将如此大的数据集导入 MySQL 的最佳方法是什么?使用 resque 或 sidekiq 创建多个工作人员是个好主意吗?
我需要将此数据插入到存在于多个数据库中的给定表中。在 Rails 中,我有一个模型只与一个数据库对话。那么如何扩展解决方案以与我的模型中的多个 mysql 数据库通信?
谢谢
【问题讨论】:
标签:
mysql
ruby-on-rails-3
csv
resque
sidekiq
【解决方案1】:
一种方法是使用数据库应用程序本身的本地接口进行导入和导出;它将针对特定目的进行优化。
对于 MySQL,mysqlimport 提供了该接口。请注意,导入也可以作为 SQL 语句完成,并且此可执行文件为底层 SQL 命令提供了一个更健全的接口。
就实现而言,如果这是一个频繁的导入练习,sidekiq/resque/cron 作业是最好的方法。
[编辑]
上面提到的SQL命令是LOAD DATA INFILE,正如另一个答案所指出的那样。
【解决方案2】:
性能方面最好的方法可能是使用 MYSQL 的 LOAD DATA INFILE 语法并在每个数据库上执行导入命令。这要求数据文件对于每个数据库实例都是本地的。
正如另一个答案所暗示的那样,mysqlimport 可用于简化导入,因为 LOAD DATA INFILE 语句语法是高度可定制的,并且可以处理多种数据格式。