在Rails中批量插入和“批量验证”的问题

时间:2010-06-21 22:28:30

标签: ruby-on-rails activerecord

我正在使用ar-extensions的导入功能进行批量导入,速度很快,但不如我想的那么快。我从日志中看到的两个问题:

  1. 我仍然看到单独的SQL插入语句 - 为什么不进行多行插入?

  2. 我有一个:validates_uniqueness_of,我看到它为每行做了一个SELECT。是否存在“批量验证”方式,它可以使用WHERE子句选择所有内容并以相应方式验证唯一性?

  3. 我犹豫是否因为这样做而下载到SQL,所以任何建议 - 或者使用不同的gem /插件?谢谢!

2 个答案:

答案 0 :(得分:1)

我在几个项目中使用FasterCSV,看起来足够快。但是,它不执行“多行插入”。我不认为ActiveRecord能够做到这一点,特别是涉及验证。

使用你的数据库的本机导入机制总是会更快,但你会失去一些AR的优点 - 验证和过滤器,主要是。

答案 1 :(得分:1)

我在模型中使用instance_attribute(@bulk_loading)来进行批量插入。如果变量为true,则不运行某些验证。

正如egarcia所说,目前AR不支持多次插入。

validate_uniqueness_of验证加速

1)在dbms中创建一个唯一索引来进行检查,不要使用AR进行检查。 - 当插入因违反唯一索引而失败时,只需从dbms驱动程序中捕获相应的错误

2)在db中为uniqueness_validation创建一个非唯一索引,并检查(使用db查询分析技术)索引正在使用,并且sql唯一性检查正在尽快执行。