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查询 关系表的数据操作 ...
随机推荐
- 九度OJ-1131-合唱排队-双向递增子序列
题目1131:合唱队形 时间限制:1 秒 内存限制:32 兆 特殊判题:否 提交:4948 解决:1570 题目描述: N位同学站成一排,音乐老师要请其中的(N-K)位同学出列,使得剩下的K位同学不交 ...
- 纯C:AES256
尼玛的WordPress把格式全搞乱了 aes256.h #ifndef _AES256_H_ #define _AES256_H_ #include <stdio.h> #include ...
- innerHTML与innerText功能的强大
例: <div id="study"> <span style="color:red">学习</span>study < ...
- {"errcode":48001,"errmsg":"api unauthorized}
微信公众号基础知识说明 网页授权获取微信用户信息:两种 scope 域 https://open.weixin.qq.com/connect/oauth2/authorize?appid={0}&am ...
- 质因子分解(Pollard_Rho法)
LL Pollard_Rho(LL n, LL c) { LL x, y, d; LL i = , k = ; x = y = rand() % n; do { i++; d = gcd(n + y ...
- 实验吧—Web——WP之 上传绕过
我们先上传一个png文件,发现他说必须上传后缀名为PHP的文件才可以,那么,我们尝试一下,PHP文件 但是他又说不被允许的文件类型 在上传绕过里最有名的的就是00截断,那么我们就先要抓包 在这里我们需 ...
- struts2文件上传1
<form action="hello/UploadAction_upload.action" enctype="multipart/form-data" ...
- Js 向表单中添加多个元素
@{ ViewBag.title = "地图导航"; } @model YT.XWAJ.Public.Application.MapNavigation.Dto.MapNaviga ...
- 【spring源码分析】spring ioc容器之前生今世--DefaultListableBeanFactory源码解读
spring Ioc容器的实现,从根源上是beanfactory,但真正可以作为一个可以独立使用的ioc容器还是DefaultListableBeanFactory,因此可以这么说, DefaultL ...
- LG4071 [SDOI2016]排列计数
题意 题目描述 求有多少种长度为 n 的序列 A,满足以下条件: 1 ~ n 这 n 个数在序列中各出现了一次 若第 i 个数 A[i] 的值为 i,则称 i 是稳定的.序列恰好有 m 个数是稳定的 ...