扫码关注官方订阅号
假如我要从别人那里一次性获得10w条数据,并写入自己的数据库。有什么办法可以直接一次性做到呢?我是目前利用分页,一次读几百条再写入数据库。大家遇到这种问题是怎么解决的呢?想听听大神的意见。
人生最曼妙的风景,竟是内心的淡定与从容!
分开写入应该是比较通用的解决方案。因为一次性写入的话PHP也会出现超时的情况而导致写入失败,不推荐用。
那么即使是分开写入有没什么值得优化的地方呢?我感觉还是有的:
在正式写入前对数据源进行一次过滤处理(毕竟别人的数据也会有脏数据,重复数据),进行简单的去重操作即可。
delete from table as a inner join table as b on a.id=b.id where a.id <b.id(保留分组后的最大值)
进行一次排序,让数据库录入的时候是以主键自增的顺序录入(查询的话是会更快的,插入的话不知道会不会提升效率,没考证过,但是还是推荐这样做)。
录入数据的时候,功能上最好写成几个函数间的相互调用。因为函数里面的变量是局部变量,函数调用完毕变量就释放,不会占用太大内存。
如果你的数据总量达到亿级,数据库可以使用Percona的TokuDB引擎,这是一个MySQL引擎,大数据(亿级)时可以作为InnoDB(XtraDB)的替代方案,而且优势明显,高压缩率,高写入速度,更加稳定的大数据查询速度.如果你的数据只有百万级或者千万级,那用InnoDB就好了,这时InnoDB更具优势.
批量导入大量数据到MySQL建议用load data infile:
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;
微信扫码关注PHP中文网服务号
QQ扫码加入技术交流群
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号
PHP学习
技术支持
返回顶部
分开写入应该是比较通用的解决方案。
因为一次性写入的话PHP也会出现超时的情况而导致写入失败,不推荐用。
那么即使是分开写入有没什么值得优化的地方呢?我感觉还是有的:
在正式写入前对数据源进行一次过滤处理(毕竟别人的数据也会有脏数据,重复数据),进行简单的去重操作即可。
delete from table as a inner join table as b on a.id=b.id where a.id <b.id(保留分组后的最大值)
进行一次排序,让数据库录入的时候是以主键自增的顺序录入(查询的话是会更快的,插入的话不知道会不会提升效率,没考证过,但是还是推荐这样做)。
录入数据的时候,功能上最好写成几个函数间的相互调用。因为函数里面的变量是局部变量,函数调用完毕变量就释放,不会占用太大内存。
如果你的数据总量达到亿级,数据库可以使用Percona的TokuDB引擎,这是一个MySQL引擎,大数据(亿级)时可以作为InnoDB(XtraDB)的替代方案,而且优势明显,高压缩率,高写入速度,更加稳定的大数据查询速度.如果你的数据只有百万级或者千万级,那用InnoDB就好了,这时InnoDB更具优势.
批量导入大量数据到MySQL建议用
load data infile: