php导出百万数据到csv
<?php
set_time_limit(0); // 设置超时
ini_set('memory_limit', '100M'); // 设置最大使用的内存 header("Content-type:text/csv");
header("Content-Disposition:attachment;filename=" . date('Ymd'). '.csv');
header('Cache-Control:must-revalidate,post-check=0,pre-check=0');
header('Expires:0');
header('Pragma:public');
$out = fopen('php://output', 'w'); $bom = chr(0xEF).chr(0xBB).chr(0xBF); // 防止乱码 $func = function ($list){
$arr = [];
foreach ($list as $v){
$arr[$v['id']] = $v['name']
}
return $arr;
} // todo 注意我这里都是用sql语句直接代替查询
$list = select * from area;
$area = $func($list);
$list = select * from greate;
$greate = $func($list);
$list = select * from School;
$School = $func($list);
ob_end_clean();
ob_implicit_flush(5); fputcsv($out, [$bom . '学生编号','学生姓名','所属区域','所属年级','所属学校']); // 上面整理好了对应关系
do{
$i = 0;
$list = select * from student where id > $i order by id asc limit 10000
if(!$list) break;
foreach($list as $v){
if($v['id'] > $i) $i = $v['id']; // 这里可以不这样写,这些就自己优化吧
fputcsv($out, [
$v['student_no'],$v['name'],
$area[$v['areaId']],
$greate[$v['gradeId']],
$School[$v['SchoolId']],
]);
}
}while(true) fclose($out);
exit();
起因:有一次业务需求,需要导出数据库中的所有数据给接口下游,以便下游比对所有数据是否一致。
- 这时候数据库中已经有将近100+万数据。下游希望要的数据并不是数据库的格式,格式特定样式的。这时候就需要关联上好多个表进行同时查询。
- 我最开始我是使用orm模式进行处理导对应字段,导出的数据(我做了redis缓存),整个导出过程用了半天。
- 我用phpAdmin联合查询导出数据的时候用了不到3分钟;
思考
- jion与orm用哪个
- 用orm为什么慢
- 用orm是否也可以很快
先说今天的主题
- 假设现在有一个天津市学生表(有100+万数据)
student table
| 字段 | 类型 | 备注 |
|---|---|---|
| id | int | |
| student_no | string | 学生编号 |
| name | string | 学生姓名 |
| areaId | int | 所属区域的id |
| gradeId | int | 年级ID |
| SchoolId | int | 学校ID |
area table (15条数据)
| 字段 | 类型 | 备注 |
|---|---|---|
| id | int | |
| name | string | 区域名称 |
greate table (12条数据)
| 字段 | 类型 | 备注 |
|---|---|---|
| id | int | |
| name | string | 区域名称 |
School table (100+条数据)
| 字段 | 类型 | 备注 |
|---|---|---|
| id | int | |
| name | string | 校园名称 |
要求导出所有内容到csv文件中 格式要求:学生编号,学生姓名,所属区域,所属年级,所属学校
php导出百万数据到csv的更多相关文章
- Hive导出复杂数据到csv文件
工作中经常遇到使用Hive导出数据到文本文件供数据分析时使用.Hive导出复杂数据到csv等文本文件时,有时会遇到以下几个问题: 导出的数据只有数据没有列名. 导出的数据比较复杂时,如字符串内包含一些 ...
- SpringBoot图文教程10—模板导出|百万数据Excel导出|图片导出「easypoi」
有天上飞的概念,就要有落地的实现 概念十遍不如代码一遍,朋友,希望你把文中所有的代码案例都敲一遍 先赞后看,养成习惯 SpringBoot 图文教程系列文章目录 SpringBoot图文教程1「概念+ ...
- PHP导出大量数据到csv表
对于做后台开发的码农来说,从excel导入数据到数据库亦或者是从数据库导出数据到excel都是很常见的操作.由于经常遇到这样的场景,也因为从数据库导出数据到表格所遇到的坑有很多,所以需要另辟途径来进行 ...
- Php导出百万数据的优化
导出数据量很大的情况下,生成excel的内存需求非常庞大,服务器吃不消,这个时候考虑生成csv来解决问题,cvs读写性能比excel高.测试表student 数据(大家可以脚本插入300多万测数据.这 ...
- python提取百万数据到csv文件
转自:http://www.2cto.com/kf/201311/258112.html 今天有需求,需要把系统所有用户注册的id和邮箱等信息导出来提供给他们,在mysql里面count了下,大概有3 ...
- java 导出百万数据到excel
@RequestMapping("export") public void write(HttpServletRequest request,HttpServletResponse ...
- java 分页导出百万级数据到excel
最近修改了一个导出员工培训课程的历史记录(一年数据),导出功能本来就有的,不过前台做了时间限制(只能选择一个月时间内的),还有一些必选条件, 导出的数据非常有局限性.心想:为什么要做出这么多条件限制呢 ...
- 【shell mysql 导出数据到csv脚本,完美解决乱码转义符等问题】-费元星
#!/bin/bash#@author:feiyuanxing [既然笨到家,就要努力到家]#@date:2017-12-05#@E-Mail:feiyuanxing@gmail.com#@TARGE ...
- C#导出数据到CSV和EXCEL文件时数字文本被转义的解决方法
今天写C#导出datagrid数据到csv格式文件的时候,发现不管怎么尝试,凡是单元格里面全是数字的单元格,在用Excel打开的时候,都被自动转义成数据格式.数据查看极其不方便.最后google了一下 ...
随机推荐
- 用curl通过相同IP请求不同域名的URL
tomcat可以从一个IP响应不同的域名. $ curl -I http://127.0.0.1:8080 -H "Host:w.example.com" 可以影响http的ho ...
- Python3面向对象编程实例
/*认真研究完这个实例,理解python面向对象编程的方法*/class Person: """人员信息""" # 姓名(共有属性) nam ...
- you have new mail in /var/spool/mail/root !
今天开发的同事告诉我,他在登录系统时老是提示you have new mail in /var/spool/mail/root ! 我一猜就知道他们肯定又自己写定时任务了,这样的事已经发生过好几回了, ...
- cidr地址段
CIDR采用各种长度的"网络前缀"来代替分类地址中的网络号和子网号,其格式为:IP地址 = {<网络前缀>,<主机号>}.为了区分网络前缀,通常采用&quo ...
- 遗传算法求解旅行商(TSP)问题 -- python
参考资料: 遗传算法解决TSP旅行商问题(附:Python实现) 遗传算法详解(GA)(个人觉得很形象,很适合初学者) from itertools import permutations impor ...
- svg 画地图
下载一个svgDeveloper软件,破解版下载 1.首先找一张地图作为绘制模板;(当然你也可以自己画,不准确怪我咯!) 2.新建svg文件:File --> New --& ...
- Paper | No-reference Quality Assessment of Deblocked Images
目录 故事背景 本文方法(DBIQ) 发表在2016年Neurocomputing. 摘要 JPEG is the most commonly used image compression stand ...
- Mac 电脑无法登陆 账号了
版本:10.14.2 每次输入用户名和密码都没有反应: 进入 命令行执行: defaults delete com.apple.appstore.commerce Storefront 然后重启机器, ...
- List集合分组实现教程
封装一个方法,用一个Map来实现,这里是根据bean类的seq字段进行拆分的,分成好几个list private LinkedHashMap<String,List<HandleInfo& ...
- WEB测试应该注意哪些地方,怎样才能做好WEB测试
基于Web的系统测试与传统的软件测试既有相同之处,也有不同的地方,对软件测试提出了新的挑战.基于Web的系统测试不但需要检查和验证是否按照设计的要求运行,而且还要评价系统在不同用户的浏览器端的显示是否 ...