我正在使用ar-extensions的导入功能进行批量导入,速度很快,但不如我想的那么快。我从日志中看到的两个问题:
我仍然看到单独的SQL插入语句 - 为什么不进行多行插入?
我有一个:validates_uniqueness_of,我看到它为每行做了一个SELECT。是否存在“批量验证”方式,它可以使用WHERE子句选择所有内容并以相应方式验证唯一性?
我犹豫是否因为这样做而下载到SQL,所以任何建议 - 或者使用不同的gem /插件?谢谢!
答案 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唯一性检查正在尽快执行。