美文网首页
tp5分批次批量插入与更新数据2021-04-22

tp5分批次批量插入与更新数据2021-04-22

作者: 阿然学编程 | 来源:发表于2021-04-21 10:48 被阅读0次
        public function index()
        {
            //插入的数据量较大,添加以下代码
            //ini_set("memory_limit", "-1");//取消内存限制
            //ini_set('max_execution_time', '0');//取消时间限制
            set_time_limit(0);//取消时间限制
    
            //查询数据
            $data = Db::table('数据表')->select();
            //分批插入(方法一)
            $arr_chunk= array_chunk($data , 500);//将一个数组分割多个数组
            foreach ($arr_chunk as $v) {
                  //此处批量插入数据操作
                  $res = Db::name('数据表')->insertAll($v);
            }
            
            //分批插入(方法二)插入时间较长
            $num = 100;//每次导入条数
            $limit = ceil(count($data) / $num);
            for ($i = 1; $i <= $limit; $i++) {
                $offset = ($i - 1) * $num;
                $arr_slice = array_slice($data, $offset, $num);
                $res = Db::name('数据表')->insertAll($data);
            };
        }
    
    
        //批量插入百万千万数据
        public function testInsta()
        {
            set_time_limit(0);
            ini_set("memory_limit", -1);
            $startTime = time();
    
            // 插入100w条数据,测试用时 109s
            // 插入1000w条数据,测试用时 1339s
            $num = 100000;
            for ($i = 1; $i <= $num; $i++) {
                $insertData[] = array(
                    'name' => 'name_' . $i,
                    'sex' => mt_rand(0, 1)
                );
            }
            $onceNum = 1000;//每次处理1000条数据
            $limit = ceil($num / $onceNum);
            try {
                for ($i = 1; $i <= $limit; $i++) {
                    $offset = ($i - 1) * $onceNum;
                    $data = array_slice($insertData, $offset, $onceNum);
                    dump($data);
                    Db::table('test1')->insertAll($data);
                }
                $endTime = time();
                $useTime = $endTime - $startTime;
                echo "$num 数据插入用时:$useTime 秒";
            } catch (\Exception $e) {
                echo "出现异常:" . $e->getMessage();
            }
        }
    
        public function testUpdate()
        {
            set_time_limit(0);
            ini_set("memory_limit", -1);
            $startTime = time();
            $userModel = new Tuser();//定义Tuser数据模型
            $num = 10000000;
            for ($i = 1; $i <= $num; $i++) {
                $updateData[] = array(
                    'id' => $i,
                    'num' => mt_rand(0, 100000)
                );
            }
            $onceNum = 1000;//每次处理1000条数据
            $limit = ceil($num / $onceNum);
            try {
                for ($i = 1; $i <= $limit; $i++) {
                    $offset = ($i - 1) * $onceNum;
                    $data = array_slice($updateData, $offset, $onceNum);
                    $userModel->saveAll($data);
                }
                $endTime = time();
                $useTime = $endTime - $startTime;
                echo "$num 条数据更新用时:$useTime 秒";
            } catch (\Exception $e) {
                echo "出现异常:" . $e->getMessage();
            }
        }
    

    相关文章

      网友评论

          本文标题:tp5分批次批量插入与更新数据2021-04-22

          本文链接:https://www.haomeiwen.com/subject/pxuxrltx.html