如何优雅的而又快速的处理百万级MySQL数据

   很多时候,我们老大作为专业的前端。也会要求更为优雅的数据处理和优雅的代码。主要用于处理百万级数据交互使用。这段程序主要考虑不修改服务器配置,和考虑不造成服务器负荷过载。直接上代码吧。

  前端页面js代码:

    删除前一个月订单',
    $(".deletes").click(function(){
        var id=$(this).attr("id");
        if(isNaN(id)){
            var values="";
            var getChkboxs=$(".J_check");
            for (var i=0;i json.num){
                var data = {
                    now:json.now,
                }
                send(data);
                $("#span").html('删除中');
                $("#content").html("请耐心等待!正在操作删除,还剩余"+json.count+"条");
          }else if(json.count > 0){
              var data = {
                  now:json.now,
              }
              send(data);
              $("#span").html('删除即将结束');
              window.location.reload();
          }
       }else if(json.status == 0){
              $("#span").html('提示');
              $("#content").html("输入的密码不正确,请重试!");
              }
      }
   });
 }
 " _ue_custom_node_="true">        // end

   控制器代码:

       /**
                 * 应用场景:一键清除回收站
                 * @return [type] ajaxreturn 返回状态
                */
                public function onetouch()
                {
                    $model = D('order');
                    $user = User::getInstance()->getInfo();
                    $password = trim($_POST['password']);
                    $new_password = md5($password.md5($user['verify']));
                    if($new_password != $user['password'])
                    {
                        $ajax['status'] = 0;
                        $ajax['msg'] = '输入的密码不正确,请重试!';
                    }
                    // 删除条件
                    $where = array();
                    $where['is_del'] = array('eq', 1);
                    // 生产环境开启此条件
                    $where['add_time'] = array('elt',date('Y-m-d', strtotime("-31 days")));
                    // 处理的总数
                    $count = $model->where($where)->count();
                    // 自定义处理数
                    $num = 10000;
                    $page = $this->page($count, $num);
                    $all = $model->field('id')->where($where)
                    ->limit($page->firstRow . ',' . $page->listRows)
                    ->select();
                    if($all == null)
                    {
                        $ajax['status'] = 0;
                        $ajax['msg'] = '不存在符合条件的数据!请核对!';
                    }else{
                        foreach($all as $k => $v)
                        {
                            $ids[$k] = $v['id'];
                        }
                        $now = $_POST['now'] ? $_POST['now'] : 0;
                        $logModel = M('order_logs');
                        $detailModel = M('order_detail');
                        if(isset($now))
                        {
                            $logModel->where(array('order_id' => array('in',$ids)))->delete();
                            // 订单详情表
                            $detailModel->where(array('order_id' =>array('in',$ids)))->delete();
                            // 订单表
                            $model->where(array('id' =>array('in',$ids)))->delete();
                            $now++;
                            $ajax = array(
                                'now'=>$now,
                                'count'=>$count,
                                'status' => 1,
                                'num' => $num,
                            );
                        }
                    }
                    $this->ajaxReturn($ajax);
                    exit;
                }

    图片.png

            当前处理的是的订单表,和订单详情表以及订单日志表。

    图片.png

            当前数据总数为426045 * 3 = 1275135 。见证奇迹的时刻到了。

图片.png

图片.png


图片.png


图片.png

    神奇吧!1275135条数据,2.47分。和用户三次握手效果真的是和谐友好!




本文链接:https://itarvin.com/detail-6.aspx

登录或者注册以便发表评论

登录

注册