从数据库中分批取数据的两种方式

简介: 从数据库中分批取数据的两种方式

需求:


从数据库中取出一批数据,比如数据上限是20万,现在要对其进行处理,用多线程分批处理。


(数据所在表的主键id是递增的【分片数据库自定义的主键自增函数】)


难点:如何从数据库中分批读取数据,每批之间又无重复数据


思路1:


用分页查询的方式取


先查询出要处理的总数据量 count,然后假设每批要处理1000条,


int size = 1000;
        int threadNum = count / size + 1;
        for (int i = 0; i < threadNum; i++) {
            Map paramMap = new HashMap();
            //分批查询
            paramMap.put("PAGE_INDEX", i*size);
            paramMap.put("PAGE_SIZE", size);
            //用 paramMap 去分页查询数据库
        }

【好处是:每一批数据基本都是数量相同的(除了最后一批)。


缺点是:


需要计算分页,查询时还要排序,同时在整个取数据的过程中:


1、不能对每批获取数据时的条件字段进行更新操作


2、不能对数据记录进行删除、增加操作】


思路2:


用取模的方式取数据

int size = 1000;
        int threadNum = count / size + 1;
        for (int i = 0; i < threadNum; i++) {
            Map paramMap = new HashMap();
            //分批查询
            paramMap.put("threadNum", threadNum);
            paramMap.put("mod", i);
            //用 paramMap 去取模查询数据库//  SELECT * FROM `tableName` WHERE id % threadNum = mod ; 即查询条件为 自增主键除以线程数余数为当前遍历到的 i
        }

【好处是:


查询时无需分页、排序所以速度快,


在整个取数据过程中,


1、在一定程度上可以对每批查询条件字段进行更新;


2、可以对数据记录进行删除操作


缺点是:主键必须相对连续、每批数据数量可能有很大误差(如果主键不完全连续,比如做过删除操作,或者查询条件不同)】

相关文章
|
8天前
|
存储 人工智能 Cloud Native
云栖重磅|从数据到智能:Data+AI驱动的云原生数据库
在9月20日2024云栖大会上,阿里云智能集团副总裁,数据库产品事业部负责人,ACM、CCF、IEEE会士(Fellow)李飞飞发表《从数据到智能:Data+AI驱动的云原生数据库》主题演讲。他表示,数据是生成式AI的核心资产,大模型时代的数据管理系统需具备多模处理和实时分析能力。阿里云瑶池将数据+AI全面融合,构建一站式多模数据管理平台,以数据驱动决策与创新,为用户提供像“搭积木”一样易用、好用、高可用的使用体验。
云栖重磅|从数据到智能:Data+AI驱动的云原生数据库
|
2月前
|
关系型数据库 MySQL 数据库
ORM对mysql数据库中数据进行操作报错解决
ORM对mysql数据库中数据进行操作报错解决
82 2
|
10天前
|
SQL 关系型数据库 数据库
国产数据实战之docker部署MyWebSQL数据库管理工具
【10月更文挑战第23天】国产数据实战之docker部署MyWebSQL数据库管理工具
48 4
国产数据实战之docker部署MyWebSQL数据库管理工具
|
8天前
|
关系型数据库 分布式数据库 数据库
云栖大会|从数据到决策:AI时代数据库如何实现高效数据管理?
在2024云栖大会「海量数据的高效存储与管理」专场,阿里云瑶池讲师团携手AMD、FunPlus、太美医疗科技、中石化、平安科技以及小赢科技、迅雷集团的资深技术专家深入分享了阿里云在OLTP方向的最新技术进展和行业最佳实践。
|
15天前
|
人工智能 Cloud Native 容灾
云数据库“再进化”,OB Cloud如何打造云时代的数据底座?
云数据库“再进化”,OB Cloud如何打造云时代的数据底座?
|
23天前
|
SQL 存储 关系型数据库
数据储存数据库管理系统(DBMS)
【10月更文挑战第11天】
74 3
|
2月前
|
JavaScript Java 关系型数据库
毕设项目&课程设计&毕设项目:基于springboot+vue实现的在线考试系统(含教程&源码&数据库数据)
本文介绍了一个基于Spring Boot和Vue.js实现的在线考试系统。随着在线教育的发展,在线考试系统的重要性日益凸显。该系统不仅能提高教学效率,减轻教师负担,还为学生提供了灵活便捷的考试方式。技术栈包括Spring Boot、Vue.js、Element-UI等,支持多种角色登录,具备考试管理、题库管理、成绩查询等功能。系统采用前后端分离架构,具备高性能和扩展性,未来可进一步优化并引入AI技术提升智能化水平。
毕设项目&课程设计&毕设项目:基于springboot+vue实现的在线考试系统(含教程&源码&数据库数据)
|
2月前
|
Java 关系型数据库 MySQL
毕设项目&课程设计&毕设项目:springboot+jsp实现的房屋租租赁系统(含教程&源码&数据库数据)
本文介绍了一款基于Spring Boot和JSP技术的房屋租赁系统,旨在通过自动化和信息化手段提升房屋管理效率,优化租户体验。系统采用JDK 1.8、Maven 3.6、MySQL 8.0、JSP、Layui和Spring Boot 2.0等技术栈,实现了高效的房源管理和便捷的租户服务。通过该系统,房东可以轻松管理房源,租户可以快速找到合适的住所,双方都能享受数字化带来的便利。未来,系统将持续优化升级,提供更多完善的服务。
毕设项目&课程设计&毕设项目:springboot+jsp实现的房屋租租赁系统(含教程&源码&数据库数据)
|
29天前
|
SQL 存储 关系型数据库
添加数据到数据库的SQL语句详解与实践技巧
在数据库管理中,添加数据是一个基本操作,它涉及到向表中插入新的记录
|
1月前
|
SQL 监控 数据处理
SQL数据库数据修改操作详解
数据库是现代信息系统的重要组成部分,其中SQL(StructuredQueryLanguage)是管理和处理数据库的重要工具之一。在日常的业务运营过程中,数据的准确性和及时性对企业来说至关重要,这就需要掌握如何在数据库中正确地进行数据修改操作。本文将详细介绍在SQL数据库中如何修改数据,帮助读者更好
148 4
下一篇
无影云桌面