php大量数据 10M数据从查询到下载 【内存溢出,查询过慢】解决方案
功能描述:做数据导出
功能分析:1.采用csv的格式,因为csv的格式比excel小
2. 3W条数据,100个字段需要全部导出
开始
直接查询
//此处使用的laravel框架,具体含义一看就懂
tableModel::orderby("id","asc")->get()->toArray();
为什么会执行这么长时间?还没有返回结果
猜测出现的问题
1.查询时间过长,mysql断开连接。
2.php内存溢出。
测试
1.先测试mysql :在Navicat 数据库工具中执行查询
mysql 执行没有什么问题。
2. 测试php是否是内存过大
echo '开始内存:'.memory_get_usage(), '</br>';
$tmp=$car_model->take(1000)->get()->toArray();
echo '运行后内存:'.memory_get_usage(), '</br>';
unset($tmp);
echo '回到正常内存:'.memory_get_usage();
正常返回值了,再来2000条数据
$tmp=$car_model->take(2000)->get()->toArray();
接下来5000条
$tmp=$car_model->take(5000)->get()->toArray();
居然是原来内存的10倍,内存的占用根据条数成倍的增加,好强大。
接下来10000条数据
$tmp=$car_model->take(10000)->get()->toArray();
OH YEAH! 爆掉了
分析结果 :php内存溢出
原理:在做数据统计分析时,经常会遇到大数组,可能会发生内存溢出
ini_set(‘memory_limit’,’64M’); //重置php可以使用的内存大小为64M。
在运行到5000条查询的时候就已经60M了。所以挂了
本人的解决方案
1.利用curl多线程调用方法,避免一次性的给mysql和php 造成压力。 请看文章curl模拟多线程
2.线程数是根据数据条数来设定的,每1000条数据一个线程,3W条数据生成30个线程,每个线程生成一个csv文件。
3.文件的命名方式按照筛选条件来进行命名。文件生成后,在读取所有文件写到一个文件里面去。
后话:我开始做方案的时候,并没有具体分析问题。现在分析完问题,是内存溢出了。那我完全可以分段写入啊。
先读取1000条,写入csv文件,unset销毁变量。
在读1000条,在写入,销毁变量。
直到把数据都写进去。
测试方案行不行
echo '开始内存:'.memory_get_usage(), '</br>';
$tmp1=$car_model->take(1000)->get()->toArray();
unset($tmp1);
$tmp2=$car_model->take(1000)->get()->toArray();
unset($tmp2);
$tmp3=$car_model->take(1000)->get()->toArray();
unset($tmp4);
$tmp4=$car_model->take(1000)->get()->toArray();
echo '运行后内存:'.memory_get_usage(), '</br>';
unset($tmp4);
echo '回到正常内存:'.memory_get_usage();
die;
居然和只执行1000条内存占用是一样的
不过多线程不需要等待上一次执行完成,可能会快点,但是增加了网络传输。
php大量数据 10M数据从查询到下载 【内存溢出,查询过慢】解决方案的更多相关文章
- 010.简单查询、分组统计查询、多表连接查询(sql实例)
-------------------------------------day3------------ --添加多行数据:------INSERT [INTO] 表名 [(列的列表)] --SEL ...
- 关系数据库SQL之高级数据查询:去重复、组合查询、连接查询、虚拟表
前言 接上一篇关系数据库SQL之基本数据查询:子查询.分组查询.模糊查询,主要是关系型数据库基本数据查询.包括子查询.分组查询.聚合函数查询.模糊查询,本文是介绍一下关系型数据库几种高级数据查询SQL ...
- Oracle的学习二:表管理(数据类型、创建/修改表、添加/修改/删除数据、数据查询)
1.Oracle表的管理 表名和列名的命名规则: 必须以字母开头: 长度不能超过30个字符: 不能使用oracle的保留字: 只能使用如下字符:A-Z, a-z, 0-9, $, # 等. Oracl ...
- Oracle数据库--解决单张表中数据量巨大(大数据、数据量上百万级别,后查询,更新数据等耗时剧增)
版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/QQ578473688/article/details/54561397 思路1:采用备份表 备份表中 ...
- 【Java】数据库查询的数据直接以指定文件类型下载到本地(弹出下载框)
欲实现的功能目标:当点击下图的导出数据文件时弹出文件下载框,默认csv格式,用户自定义下载的本地路径 遇到的问题: 1.项目之前做过一次下载,但是是使用了本地文件模板.用输入流读取文件模板,插入数据, ...
- php查询mysql返回大量数据结果集导致内存溢出的解决方法
web开发中如果遇到php查询mysql返回大量数据导致内存溢出.或者内存不够用的情况那就需要看下MySQL C API的关联,那么究竟是什么导致php查询mysql返回大量数据时内存不够用情况? 答 ...
- mysq表的三种关系,数据的增删改以及单表多表查询
一丶三种关系 分析步骤: #.先站在左表的角度去找 是否左表的多条记录可以对应右表的一条记录,如果是,则证明左表的一个字段foreign key 右表一个字段(通常是id) #.再站在右表的角度去找 ...
- 10Oracle Database 数据表数据查询
Oracle Database 数据表数据查询 DML 数据操纵语言 - 数据的查看和维护 select / insert /delete /update 基本查询语句 Select [distinc ...
- Django——8 关系表的数据操作 表关联对象的访问 多表查询
Django 关系表中的数据操作 表关联对象的访问 关联对象的add方法 create方法 remove方法 clear方法 多表查询 查询补充 聚合查询 分组查询 F查询 Q查询 关系表的数据操作 ...
随机推荐
- hadoop day 4
1.自定义的一种数据类型,要在hadoop的各个节点之间传输,应该遵循hadoop的序列化机制 就必须实现hadoop相应的序列化接口Writable 实现的方法包括:write(),readFiel ...
- Java调用Lua脚本(热载实现)
前言: Lua作为解析执行的脚本语言, 往往是易变逻辑编写的首选语言, 尤其是在游戏领域. C/C++和Lua的结合, 往往了标配. 比如Redis, Nginx其对Lua的支持, 也是杠杠的. 当然 ...
- ss linux终端配置
最近ss莫名宕机,懒得重新安装了,就安装了一个非gui版本,安装非gui版本还有一个优点就是在远程服务器的时候可以用proxychains进行终端代理,非常友好实用.下面简单的说一下如何进行终端ss ...
- Keepalived 进程无法关闭
操作系统:SLES12sp2 keepalived版本:1.2.12 问题描述: 使用命令"systemctl stop keepalived" 无法关闭keepalived,使用 ...
- Unity 3D Shader流水线
Unity开发VR之Vuforia 本文提供全流程,中文翻译. Chinar 坚持将简单的生活方式,带给世人!(拥有更好的阅读体验 -- 高分辨率用户请根据需求调整网页缩放比例) Chinar -- ...
- Cocos闪屏视频VideoPlayer踩坑记录
游戏闪屏动画(Logo&健康游戏公告)使用了 experimental::ui::VideoPlayer 来播放视频 3.7版本开发到目前为止发现2个坑 1.设置大小 _videoPlayer ...
- hdu3374 String Problem KMP+最大最小表示法
Give you a string with length N, you can generate N strings by left shifts. For example let consider ...
- 安装排错 max file descriptors [4096] for elasticsearch process is too low, increase to at least [65536]
https://blog.csdn.net/cookzrk/article/details/80179006 转载:https://my.oschina.net/u/2510243/blog/8105 ...
- 【BZOJ3238】【AHOI2013】差异
sam好,好写好调好ac! 原题: 图片题面好评 2<=N<=500000 在syq大神的指点下终于理解一道后缀自动姬了quq (其实是因为这道题的dp主要是在后缀树(就是拓扑序)上搞树形 ...
- Eclipse和Intel idea的常用技巧
使用Eclipse的几个必须掌握的快捷方式 “工若善其事,必先利其器”,感谢Eclipse,她 使我们阅读一个大工程的代码更加容易,在阅读的过程中,我发现掌握几个Eclipse的快捷键会使阅读体验 ...