IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 大数据 -> 对比Mysql的流式查询和普通分页查询 -> 正文阅读

[大数据]对比Mysql的流式查询和普通分页查询

背景

最近有一个场景,需要大批量处理几千w的数据,之前是按照分页查询的方式来处理,但是会导致查到最后越来越慢,想到流式查询游标查询。游标查询的方式,可能对数据库性能影响比较大,本次测试就不考虑了。
jvm参数设置
由于本地测试,机器内存比较大,为了测试效果,于是将jvm设置小一点

-ea -Xms512M -Xmx512m

普通查询

    @Test
    public void  testCommonQuery(){
        tmpFeeService.commonQuery();
    }
    //查询所有
    @Override
    public void commonQuery() {
        list();
    }

一次性查询所有的数据到,无疑会导致oom

### Error querying database.  Cause: java.sql.SQLException: GC overhead limit exceeded

流式查询

	    @Test
    public void  testStreamQuery(){
        ***Service.streamQuery();
    }
    @Override
    public void streamQuery() {
        ***Mapper.streamQuery(new ResultHandler<TmpFee>() {
            @Override
            public void handleResult(ResultContext<? extends ***> resultContext) {
                *** = resultContext.getResultObject();
                log.info("处理查询出的结果:{}",***.getBizId());
            }
        });

    }
    @Select("select * from  ***")
    @Options(resultSetType = ResultSetType.FORWARD_ONLY, fetchSize = Integer.MIN_VALUE)
    @ResultType(***.class)
    void streamQuery(ResultHandler<TmpFee> tmpFeeResultHandler);

在这里插入图片描述
JVM也非常稳定
在这里插入图片描述

普通分页查询

    @Override
    public void commonPageQuery() 
        int pageNum = 1;
        int pageSize = 10000;
        List<***> list;
        int size = 0;
        do{
          list=  ***.lambdaQuery().page(new Page<>(pageNum, pageSize, false)).getRecords();
            if (CollUtil.isNotEmpty(tmpFee)){
                log.info("处理一批数据");
                
            }else {
                continue;
            }
            size += ***.size();
            pageNum++;
        }while (Objects.equals(list.size(),pageSize));
        log.info("处理........{}条", size);

在这里插入图片描述
时间上没有区别,内存也是比较稳定的
在这里插入图片描述

参考

关于流式查询以及游标查询和普通查询的对比

  大数据 最新文章
实现Kafka至少消费一次
亚马逊云科技:还在苦于ETL?Zero ETL的时代
初探MapReduce
【SpringBoot框架篇】32.基于注解+redis实现
Elasticsearch:如何减少 Elasticsearch 集
Go redis操作
Redis面试题
专题五 Redis高并发场景
基于GBase8s和Calcite的多数据源查询
Redis——底层数据结构原理
上一篇文章      下一篇文章      查看所有文章
加:2022-05-06 11:06:45  更:2022-05-06 11:09:43 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 0:47:04-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码