在一个文本文件里存了一百万条数据,一行一条,
我需要把符合条件的每一行数据写入到数据库里,
按照以前的做法就是读取文件里的数据,然后存入数组,然后foreach数组进行一条一条的处理(符合条件的写入到数据库),
但是面对上百万条数据,如果我再继续这样做看来是自寻死路,可是处理大数据真是大姑娘我坐花轿可是头一回,一点经验也没有,
从网上找资料说用php进程/线程来解决,我对进程与线程是一头污水,请大牛们进来分享一下这方面的经验,是怎么处理大数据的,如果通过进程/线程又是怎么实现的呢?
如果是一次性把这100万数据导入mysql就完事了,用mysql的load data就可以搞的,我用load data 导入以前csdn泄漏的帐号密码650万左右的数据也就2分钟多点。。。
如果是多次复用程序,想做成脚本,可以每次读取10万个,foreach外面显式开启事务(ps:循环插入必须显式开启事务,性能比较好,一次性写入后,再统一commit,10万条速度提升最起码百倍甚至千倍,磁盘io也低),变量用完记得unset,插入100万数据那是小case。
也可以用insert into values(1,2),(2,3)...拼接的方式,性能最快。不过注意sql语句长度有限制,可以一次性插入1000条。 不显式开启事务,foreach里insert是最垃圾的做法,最慢,io压力也最大,因为每次insert,都有一次昂贵的系统调用fsync(). 循环100万次相当于调用100万次fsync. 显示开启事务,每10万次一次commit调用一次fsync,100万次只调用10次fsync。
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。