php 亿万数据脚本执行顺序

关于脚本执行顺序的总结:
在数据量不大的情况下,我们对与顺序的执行可能不太在意,但是当数据量在千万级别以上的时候,脚本执行顺序就很重要了。
下面这个脚本在calculateSellerAndNums这个方法中添加了sleep(1)这个方法,对于执行顺序有很大的影响。
sleep会让下面的方法先执行查询。(有点新奇)

(1)未添加了sleep方法,执行顺序如下

日期\设备编号10001001
2018090215
2018090326
2018090437
2018090548

(2)添加sleep方法,执行顺序如下

日期10001001
2018090212
2018090334
2018090456
2018090578

start_time = ‘20180902’
end_time = ‘20180905’

private static $_number = 0;

    //获取商户数和交易笔数
    private function calculateSellerAndNums($deviceNo)
    {
        $result = [];
        $field  = 'count(*) as nums,count(DISTINCT c.uid) as sellernumber';
        for ($i = $this->start_time; $i < $this->end_time; $i += 7200) {  // 7200为2个小时
            self::$_number ++;
            if (self::$_number % 10 == 0) {
                wlog('计数器:' . date('Y-m-d H:i:s', $i) . '-----' . date('Y-m-d H:i:s'), 'time.log');
            }
            $res = $this->consumeModel->alias('c')
                ->field($field)
                ->join('***')
                ->where('c.create_time BETWEEN ' . $i . ' AND ' . ($i + 7199) . ' AND c.pay_status = 1 AND m.device_no LIKE "'. $deviceNo .'%" AND c.`channel` = 11')
                ->find();
            $result[date('Y-m-d', $i)]['num'] += $res['nums'];
            //商户
            $result[date('Y-m-d', $i)]['sellernumber'] += $res['sellernumber'];
//            sleep(1);
        }
        return $result;
    }

    //小盒子数据导出
    public function export()
    {
        set_time_limit(0);
        try {
            $this->consumeModel = self::_selectModel();
            $baseArray = $heighArrayOne = $heighArrayThree = $newArray = $compatibleZeroArray = $compatibleOneArray = [];
            $baseArray = $this->calculateSellerAndNums("1000");
            $heighArrayOne = $this->calculateSellerAndNums("1001");
        
			//中间代码省略。。。
     
            $head = array(
                ['title' => '日期', 'key' => 'date'],
                ['title' => '基础版小盒子商户数', 'key' => 'baseSeller'],
                ['title' => '基础版小盒子交易笔数', 'key' => 'baseNum'],
                ['title' => '加强版小盒子商户数', 'key' => 'highSeller'],
                ['title' => '加强版小盒子交易笔数', 'key' => 'highNum'],
            );
            $handle = new CsvService();
            $handle->setFileName('equimentDataExport_' . time());
            $handle->addHead($head);
            //添加内容
            $handle->addContents($newArray);
            $handle->saveAsFile();
            $outputFileName = $handle->getZip();
            wlog('文件名称:' . $outputFileName, 'equiment_data_export.log');
            $path = rtrim(C('IMG_SITE_URL'), '/') . ltrim($outputFileName, '.');

        } catch (Exception $e) {
            wlog('错误信息:' . $e->getMessage(), 'equiment_data_export.log');
        }
        die(json_encode(['msg' => $path, 'state' => 1]));
    }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值