ruby-on-rails - 批量导入数据有没有比ActiveRecord更好的解决方案?

标签 ruby-on-rails ruby database orm

我使用 Ruby on Rails 为遗留(供应商)数据库开发了一个网络界面。数据库架构一团糟,> 450张表,客户数据分布在20多个,涉及复杂的连接等。

我已经为网络应用程序找到了一个很好的解决方案,它运行良好。但我们也每晚从外部数据源(目前是 SQL Server 数据库和 SOAP 提要的 View )导入,它们运行缓慢。 XML 数据导入大约需要 1.5-2.5 小时,数据库导入大约需要 4 小时。

这是在进行了一些基本优化之后,其中包括手动启动 MRI 垃圾收集器。就在那里向我暗示我做错了。我考虑过将夜间更新/插入任务移出主 Rails 应用程序,并尝试使用 JRuby 或 Rubinius 来利用更好的并发性和垃圾收集。

我的问题是:我知道 ActiveRecord 并不是真正为此类任务设计的。但在 Ruby(我的首选语言)的 O/RM 选项中,它似乎拥有最好的 Oracle 支持。

你会怎么做?坚持使用 AR 并使用不同的解释器?那真的有用吗? DataMapper 或 Sequel 怎么样?有更好的方法吗?

如果有更好的选择(不限于,但这些是我现在正在使用的其他语言),我愿意使用 Scala 或 Clojure...但我不想要像 DBI 这样的东西在我直接编写 SQL 的地方,如果除了供应商更新偶尔更改数据库架构之外没有其他原因,我宁愿更改几个类,也不愿更改数百个 UPDATE 或 INSERT 语句。

希望这个问题不是“太模糊”,但我真的可以使用一些关于这个问题的建议。

FWIW,Ruby 是 1.9.2,Rails 是 3.0.7,平台是 OS X Server Snow Leopard(或可选的 Debian 6.0)。

最佳答案

编辑 ok 刚刚意识到这个解决方案不适用于 oracle,抱歉 ---

您真的应该检查一下 ActiveRecord-Import,它易于使用并且可以使用最少的 sql 语句处理批量导入。我看到速度从 5 小时缩短到 2 分钟。而且它仍将对数据运行验证。

来自github页面:

books = []
10.times do |i| 
    books << Book.new(:name => "book #{i}")
end
Book.import books

https://github.com/zdennis/activerecord-import

关于ruby-on-rails - 批量导入数据有没有比ActiveRecord更好的解决方案?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6480148/

相关文章:

ruby-on-rails - 无法创建新的 Rails 项目 : `require' : cannot load such file --/config/boot (LoadError)

ruby-on-rails - 在 rabl 中使用装饰器

ruby-on-rails - ActiveRecord 集合和自定义方法

Mysql UNION ALL 创建双记录

mysql - 将 URL 编码的文本存储在数据库中是个好主意吗?

ruby-on-rails - 约束失败时从路由重定向

ruby-on-rails - 方法定义中的 Ruby Splat 运算符占用更多内存

Ruby 返回 bool 值的惯用方式

ruby 列表子 pids

MySQL 带有 if 条件的查询