php - 如何把大数据搬运到数据库
黄舟
黄舟 2017-04-11 09:40:19
[PHP讨论组]

假如我要从别人那里一次性获得10w条数据,并写入自己的数据库。有什么办法可以直接一次性做到呢?我是目前利用分页,一次读几百条再写入数据库。大家遇到这种问题是怎么解决的呢?想听听大神的意见。

黄舟
黄舟

人生最曼妙的风景,竟是内心的淡定与从容!

全部回复(3)
伊谢尔伦

分开写入应该是比较通用的解决方案。
因为一次性写入的话PHP也会出现超时的情况而导致写入失败,不推荐用。

那么即使是分开写入有没什么值得优化的地方呢?我感觉还是有的:

  1. 在正式写入前对数据源进行一次过滤处理(毕竟别人的数据也会有脏数据,重复数据),进行简单的去重操作即可。

    delete from table as a inner join table as b on a.id=b.id where a.id <b.id(保留分组后的最大值)

  2. 进行一次排序,让数据库录入的时候是以主键自增的顺序录入(查询的话是会更快的,插入的话不知道会不会提升效率,没考证过,但是还是推荐这样做)。

巴扎黑

录入数据的时候,功能上最好写成几个函数间的相互调用。因为函数里面的变量是局部变量,函数调用完毕变量就释放,不会占用太大内存。

PHPz

如果你的数据总量达到亿级,数据库可以使用Percona的TokuDB引擎,这是一个MySQL引擎,大数据(亿级)时可以作为InnoDB(XtraDB)的替代方案,而且优势明显,高压缩率,高写入速度,更加稳定的大数据查询速度.如果你的数据只有百万级或者千万级,那用InnoDB就好了,这时InnoDB更具优势.

批量导入大量数据到MySQL建议用load data infile:

https://dev.mysql.com/doc/refman/5.7/en/load-data.html
mysql> load data infile '/tmp/post.csv' into table mybase.post;
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号