php thinkphp 导出百万数据方案

先说一下一般我们在执行大数据操作时,遇到最常见的问题就是:
1、执行超时 参考这里
2、内存溢出 参考这里

看了这两个之后再来看这个方案,实现思路大概是:

  • 先利用set_time_limit(0)不限制执行时间
  • 将要查询的数据分段查询,每次查询创建一个csv临时文件,每次清空缓冲区
  • 数据全部写完之后将所有csv文件合并成一个csv文件
  • 合并之后利用zip扩展进行打包下载(如果没有安装此扩展,请先去安装扩展)
  • 最后将所有生成的文件删除
    /**
     * 百万级数据导出
     */

    public function bigExport(){
   
        //不限制执行时间,以防超时
        set_time_limit(0);
        //文件名
        $xlsName = '名字'.date('Ymd His');
        //统计总行数
        $sqlCount = 0;

        //表头
        $xlsCell = ['列1','列2'];
        //对应表头的字段
        $fields = 'field1,field2';

        //模型,主要使用获取器进行字段值转换
        $orderExportModel = new OrderExport();

        //统计总行数
        $sqlCount = $orderExportModel->count();

        //每次取多少条
        $sqlLimit = 2000;//每次只从数据库取2000条

        // buffer计数器
        $cnt = 0;

        $fileNameArr = array();

        
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值