分享 CSDN 600w 用户导入数据库,你的要多久

camel · 2011年12月24日 · 最后由 lrbnew 回复于 2016年06月03日 · 5721 次阅读

我用 Active Record 的 create 一条条插入数据库,10 分钟导了 4w 条。600w/4w*10=1500 分钟=30 小时!!!没想到效率竟然是如此之低。

本想给老板做个报表 show 下 Rails 的快速开发,没想到卡在导入了,这下脸丢大了。

后来把文件转换成 mysql 的"insert into"语句,直接用""mysqlimport"",还是这个来的快呀。5 分钟搞定。

顺便查了下 ActiveRecord 慢的原因,每 Create 一条记录都要新开一个 Transaction 并 commit。不能批量提交,即使你给 Create 传一个数组。

你有什么好方法吗?期待分享。 Nosql 真的快吗,有没有人试?

先转成 csv,然后导入 mysql 如何?

通过 AR 导入当然慢啦,还有 callback validate observe

没有业务逻辑的时候就应该用数据库纯粹的导入,数据不合就写预处理脚本或者导入之后再转导入另一个表。

我用 mongoid 保存处理 csv 的记录,也就几百条/秒,确实不快。

后来用 mysqlimport 直接导入 txt,表引擎用 MyISAM,只需要 20 秒,很给力!

lrbnew ActiveRecord 批量插入数据的性能问题 提及了此话题。 06月03日 12:27
需要 登录 后方可回复, 如果你还没有账号请 注册新账号