综述

最近在工作中遇到这样一个问题,公司项目要求订单有导出功能,以前虽然也使用PHPExcel做过几个导出功能,但是这次所需导出的数量巨大,因此在开发中遇到一些导出的坑,在此进行总结记录一下。

吐槽

首先,我们可以肯定这个需求太XX(手动和谐)了,这么大的数据量让谁看这去分析啊?一般的Excel数据都是给市场、财务的的非技术部门使用的,所以,我认为应该把思路首先放到为什么需要导出这类数据上,根据需求来解决问题。毕竟不是甲方(出钱的),改变不了需求就只能老老实实的实现具体功能了。请看下面解决方案。

分析

1、工具

首先明确我们需要导出的数量50W+,其次我们使用过都知道Excel2003版最大行数是65535行,Excel2007版的行数(1048576行)才能达到我们的要求,所以我们需要使用Excel的版本必须为2007版及以上。

2、类库

目前最常用的PHP处理Excel的类库是PHPExcel(经实例测试导出1w条数据,再加上各种数据判断处理我用了5-8分钟);我在网上还查到一款叫PHPOffice(这个我没用过,大家可以尝试一下,据说效率比PHPExcel要好,等下次再写篇博文介绍一下);还有一个fputcsv(),导出的是csv格式文件,也可以用Excel文件打开。

各种坑

1、超时

这个是直接的,请求超时。在这个多的数据请求处理下,超市非常常见,这时我们需要修改PHP的配置:set_time_limit(0)。

2、溢出

我们一次性的把所有数据从数据库取出填充到内存中,一下不光内存存储不够,并且如果服务器CPU配置不高的话使用率一下也能达到100%,会造成服务器卡负载。关于溢出我们也需要修改PHP的配置:ini_set('memory_limit', '1024M')。

解决方案

1、使用PHPExcel导出

使用此种方案一下导出50w+的数据体验非常的不好,经测试之后是虽说是可行的,服务器上也可以导出,就是时间会慢一些,而且会是一直下载状态。如果使用php类库,建议将php升级到最新的php7版本节省内存,且计算速度要快

2、使用csv导出

如果不是用php类库,那么fputcsv()是最佳方式,这种方式要比PHPExcel好很多;因为csv文件较小,csv文件数据可存放数量可大可小,csv生成不占用大量CPU和时间,而Excel的生成时间随着文件数据量的增加成而所需时间越多。

3、理想方案

将数据按照某种条件进行分割,减少导出的数据量,例如按照日期进行导出,可一周导出一次或者一天导出一次,数据分割肯定是必须的步骤,防止内存溢出,运行超时;

进行算法优化,在数据循环时,减少嵌套循环,生成csv或者Excel的数据对象时,一次成型,减少数据库查询次数,如果需要用到其他数据请提前生成相应数据结构的数据。

4、最快方案

将需求交给运维,直接运行sql语句进行导出:

SELECT*
FROMtable_name
INTO OUTFILE 'F:/test.csv'
FIELDS TERMINATED BY ','
OPTIONALLY ENCLOSED BY '"'
LINES TERMINATED BY '\r\n';

运行此语句可能出现如下错误:

The MySQL server is running with the --secure-file-priv option so it cannot execute this statement

这个是由于Mysql的配置权限问题,可以运行SHOW VARIABLES LIKE '%secure%';查看 secure-file-priv 当前的值是什么,NULL就代表禁止导出,所以需要设置一下。在Mysql安装路径下的my.ini文件,修改设置一下路径,没有的话添加上此配置:

secure_file_priv=F:/

50w+的数据你会发现很快就导出了。你也可以写此此语句,知道此文件在服务器上的路径,进行打包下载即可。

PHP大数据量(大于50万)导出到Excel解决方案相关推荐

  1. el-table 大数据量渲染,页面卡顿的解决方案

    原文: el-table大数据量渲染卡顿的解决方案 描述: 当el-table的数据有成千上万条,且在同一页全部展示,此时页面渲染的dom太多可能造成页面卡顿 原因: 因为数据量过多导致浏览器渲染过多 ...

  2. 数据库大数据量、高并发、高可用解决方案!

    数据库性能瓶颈 对于一些互联网项目来说,企业为节省成本,一般会考虑将所有的数据都存储在一个数据库中,这个时候我们只需要考虑数据库优化.SQL优化.数据缓存.限流,消息队列.服务器性能等问题. 阿里巴巴 ...

  3. 大数据量高效导入数据库(以excel导入sqlserver为例)

    本人文章陆续转向本人微信公账号发布 公众号:搬砖码农SmallNNN,期望您要是搬砖码农,一起学习探讨,祝您阅读愉快. 最近正在做一个项目,要把excel中的数据导入到sqlserver数据库中,首先 ...

  4. java 导出excel 大数据量 报错_java导出excel

    上面导出PDF和EXCEL的问题是图片路径出错!!! 数据库中存存的图片路径是"../dishpic/722f464f-3883-42aa-901f-21706da9c582.png&quo ...

  5. Linux下MySQL数据库的备份与还原,mysql快速导入导出数据库实例演示,解决mysql大数据量数据库导出慢的问题

    MySQL 数据库的备份与还原 第一章:数据库的导入与导出 ① 数据库的导出 ② 大数据量下 mysqldump 的导出优化 ③ 数据库的导出 第一章:数据库的导入与导出 ① 数据库的导出 需要用到 ...

  6. 大数据导出excel大小限制_EXCEL大数据量导出的解决方案

    将web页面上显示的报表导出到excel文件里是一种很常见的需求.润乾报表的类excel模型,支持excel文件数据无失真的导入导出,使用起来非常的方便.然而,当数据量较大的情况下,excel本身的支 ...

  7. MYSQL数据库导入大数据量sql文件失败的解决方案

    最快办法:执行下方语句,单次有效. SET GLOBAL max_allowed_packet=30*1024*1024 如果想彻底更改,在安装mysql的文件夹下找到my.ini 文件,在文件末尾添 ...

  8. EasyExcel 低内存导出大数据量的Excel方案探索 50万行 50列 (附:实现代码)

    文章目录 1.前言 2.准备工作 3.导出测试 3.1.单次查询.全量导出 3.2. 多次查询,多个文件,单次写入 3.3.多次查询,多个文件,多次写入 3.4.多线程导出探索 3.5.文件打包成ZI ...

  9. easyexcel导出excel,大数据量100万以内分页查询zip格式导出

    easyexcel导出excel,大数据量100万以内分页查询zip格式导出 准备工作 整体思路 controller层 service层 mapper层 VO 表结构 测试 备注 easyExcel ...

最新文章

  1. 递推DP UVA 1366 Martian Mining
  2. 《ASP.NET MVC3高级编程》学习笔记2
  3. linux 解析pdf下载工具,Linux高级系统级性能分析工具-perf.pdf
  4. EAE:自编码器 + BN + 最大熵 = 生成模型
  5. hadoop-0.20.2安装配置
  6. windows 远程执行 cmd 命令的 9 种方法
  7. (WWWWWWWWWW)codevs 3305 水果姐逛水果街Ⅱ
  8. 山寨AirPods2020年出货量已达6亿副,是正版7倍,网友:怪不得满大街都是
  9. 《蜗居》经典台词100句
  10. 使用powershell Client进行有效dy
  11. 华为消费者业务公布2017上半年智能手机收入暴涨
  12. Google Cloud Speech-to-Text / Text-to-Speech API 试用
  13. 最强量子计算机争霸:谷歌和IBM,谁是真正赢家?
  14. python对股票的基本面进行分析_python菜鸟学员如何获取沪深股票基本面数据
  15. Springboot尝试写一个DNF装备计算器(后端--1)
  16. 手机扫码,影像报告一手掌握|“云胶片”服务在医院大受欢迎...
  17. Vue中加载mapv和mapvgl
  18. 半导体激光器发光原理及工作原理
  19. latex导数_latex 中怎样打求导符号du/dx怎么打
  20. 也谈《火车运煤》问题

热门文章

  1. 虚拟机安装教程win10_虚拟机安装实战教程
  2. Glide框架高斯模糊图片处理
  3. 各种大片任意看!真的超级好用!
  4. 从0开发《工程测绘大师》小程序之什么是微信小程序篇(一)
  5. macbook视频格式转换_mac视频格式转换怎么操作?如何将视频转换成mac能播放的格式?...
  6. Hadoop Ha集群配置
  7. 介绍Zbrush是什么软件
  8. 任正非与美国思想家的咖啡对话全文
  9. 关于数据治理的实践与思考
  10. Pycharm中用Appium框架编写第一个自动化脚本