为了账号安全,请及时绑定邮箱和手机立即绑定

如何处理百万条数据写入到数据库

如何处理百万条数据写入到数据库

偶然的你 2019-04-08 11:16:45
在一个文本文件里存了一百万条数据,一行一条,我需要把符合条件的每一行数据写入到数据库里,按照以前的做法就是读取文件里的数据,然后存入数组,然后foreach数组进行一条一条的处理(符合条件的写入到数据库),但是面对上百万条数据,如果我再继续这样做看来是自寻死路,可是处理大数据真是大姑娘我坐花轿可是头一回,一点经验也没有,从网上找资料说用php进程/线程来解决,我对进程与线程是一头污水,请大牛们进来分享一下这方面的经验,是怎么处理大数据的,如果通过进程/线程又是怎么实现的呢?
查看完整描述

2 回答

?
PIPIONE

TA贡献1829条经验 获得超9个赞

按一千万行的数据来计算,假设你对PHP最熟悉,开发速度最快,假设你要写入到MySQL中。
用shell将一千万行文件切分成100个文件,这样每个文件有10万行,具体做法可以mansplit。
写php脚本,脚本内容是读一个文件,然后输出有效的数据。注意数据格式,严格按照表中字段的顺序来写,字段之间用半角分号隔开,行之间用\n隔开。具体参数可配置,参见MySQL的loaddata命令参数。注意是phpcli方式运行的,不要拿Apache或者其他webserver下面跑这个东西。如果按行读不知道怎么搞可以直接用php的file()函数,生成的sql语句通过error_log($sql,3,"/path/to/dataa")函数写入到文件中。同时可以echo一些调试信息,以备后续检查。
写shell脚本调用php处理日志.脚本可以类似来写
/path/to/php/bin/php-fgenMySQLdata.phpsource=logaout=dataa>/errora.log&
/path/to/php/bin/php-fgenMySQLdata.phpsource=logbout=datab>/errorb.log&
/path/to/php/bin/php-fgenMySQLdata.phpsource=logcout=datac>/errorc.log&
....重复一百行,机器配置低可以分批写,每个写10行也行。这个脚本内容很有规律吧,本身也可以用php来生成。时间又省了。
在机器上执行这个shell脚本,实际上就启动多个PHP进程来生成数据。配置够牛的话,就等于你启动了100个PHP进程来处理数据。速度又快了。
继续写shell脚本,内容是打开MySQL用loaddata来载入数据。
mysql-h127.0.0.1-uUser-ppwd-P3306-Ddbname-e'loaddatainfile"/path/to/dataa"intotableTableName(Field1,Field1,Field1);'
其中的field1...要跟生成数据的顺序对应,这个命令可以直接执行,也可以放到shell里面重复写N行,然后执行shell脚本。
PS:注意编码
                            
查看完整回答
反对 回复 2019-04-08
  • 2 回答
  • 0 关注
  • 303 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信