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

问题描述:

我正在使用ar-extensions的导入功能来执行批量导入,但它很快,但速度并不像我想的那么快。两个问题我从日志中看到:在Rails中批量插入和“批量验证”的问题

  1. 我仍然看到单个SQL INSERT语句 - 为什么没有做多行插入?

  2. 我有一个:validates_uniqueness_of,我看到它为每一行做了SELECT操作。是否有一种“批量验证”的方式,它可以只用WHERE子句选择所有的东西,然后验证唯一性呢?

我犹豫下降到SQL这样做的,所以任何建议 - 或使用不同的宝石/插件吗?谢谢!

我在我的模型中使用instance_attribute(@bulk_loading)来进行批量插入。如果变量为真,那么一些验证不会运行。

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

validate_uniqueness_of验证的加速

1)建立在DBMS中唯一索引做检查,并且不要使用AR进行检查。 - 由于违反唯一索引而导致插入失败时,从dbms驱动程序中捕获相应的错误。2)在db中为uniqueness_validation创建非唯一索引并检查(使用db查询分析技术)正在使用索引,并且sql唯一性检查正在尽可能快地执行。

+0

谢谢拉里 - 我没有想过只使用一个唯一的索引 – ambertch 2010-06-22 04:55:27

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

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