【问题标题】:parallelly run data importing in my case在我的情况下并行运行数据导入
【发布时间】:2011-11-24 16:34:48
【问题描述】:

我正在开发一个 Rails v2.3 应用。并使用 MySQL v5.1 作为我的数据库。

目前,在我的 Rails 应用程序中,我有一个 rake 任务(从 Helper 调用方法)用于执行多个 .sql 转储文件以从中导入数据模板数据库到我的development database。例如execute_dump("fill_all_tables.sql")

.sql 文件如下所示:

TRUNCTE TABLE cars;
ALTER TABLE DISABLE KEYS
INSERT INTO cars (col1,col2,col3,...) VALUES SELECT (...) FROM template_db.cars WHERE...
ALTER TABLE ENABLE KEYS
OPTIMIZE TABLE

然后,我有一个 2nd rake 任务,它将运行一个脚本来创建一个新的(第 3 个)数据库,同时从同一个 模板数据库 导入数据但放入数据到新创建的3rd database

因此,两个 rake 任务(或方法)都从同一个 模板数据库 导入数据,但放在 不同的数据库。 (一个用于开发数据库,​​另一个用于第三个数据库)。

我想让上述数据导入的事情并行发生。如何在 Rails 中实现?

附言

我的development database3rd database 在数据导入开始之前创建了相同的表。而且我的第一个 rake 任务会在数据导入后做更多的事情。

【问题讨论】:

  • 这应该可以使用复制来解决
  • 你能澄清一下任务是做什么的吗? “执行几个 .sql 转储文件以导入数据......”我不清楚。
  • @mosch ,执行 .sql 转储文件意味着执行 SQL 命令,其中所有命令都在一个 .sql 文件中。 execute_dump() 是做这件事的方法(运行所有 SQL 语句/命令)。
  • 您能举例说明这些 SQL 文件中的内容吗?并行度取决于命令。并行化需要顺序的东西是很困难的。
  • 那么是什么让您无法并行执行 SQL?

标签: mysql ruby-on-rails ruby ruby-on-rails-3 ruby-on-rails-3.1


【解决方案1】:

如果您希望简单地执行此操作,请尝试使用 UNIX shell 而不是 Ruby。这样,您就不会乱用纤维、分叉和线程。创建两个填充目标数据库的 rake 任务,并将以下代码放入名为 db_load.sh 的文件中:

     #!/bin/sh
     echo "preparing db"
     rake my_project:prepare_database

     echo "starting: copy of template to database 2"
     rake my_project:copy_from_template_database_to_database_2 &

     echo "starting: copy of template to database 3"
     rake my_project:copy_from_template_database_to_database_3 &

最后两行末尾的 & 号告诉 shell 以非阻塞方式运行这些任务。它们将并行运行。 (当然,更改 rake 任务的名称以适合您的项目。)

要运行此脚本,请输入 chmod +x db_load.sh 使其可执行,然后输入:

     ./db_load.sh

或者,你可以在你的 rake 任务中使用反引号来完成同样的事情:

    puts "starting: copy of template to database 2"
    `rake my_project:copy_from_template_database_to_database_2 &`

    puts "starting: copy of template to database 3"
    `rake my_project:copy_from_template_database_to_database_3 &`

【讨论】:

  • 谢谢rw,但恐怕ruby中的反引号在执行shell命令后不会返回进程。我的意思是只会运行反引号引用的第一个 rake 任务,然后 ruby​​ 脚本将停止,因为该进程不会返回。我想把它们放在 ruby​​ 脚本中......所以,仍然需要一种解决方法......
猜你喜欢
  • 2013-08-22
  • 2021-05-20
  • 2016-10-05
  • 1970-01-01
  • 1970-01-01
  • 2014-01-17
  • 2012-08-14
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多