MySQL按序批量操作大量数据
MySQL按序批量操作大量数据(Java、springboot、mybatisplus、ElasticSearch)
以同步全量MySQL数据到ElasticSearch为例。
核心代码
业务逻辑:
public boolean syncToElasticsearch() {log.info("Starting data synchronization to Elasticsearch.");// 获取最大id和最小idIdRange idRange = newsMapper.getIdRange();log.info("idRange is:{}", JSON.toJSONString(idRange));if (idRange == null || idRange.getMinId() <= 0 || idRange.getMaxId() <= 0) {log.warn("Invalid id range or no data found in MySQL. Sync process aborted.");return false;}long pageSize = 200L;long startId = idRange.getMinId();try {// 循环处理所有数据while (startId <= idRange.getMaxId()) {// 业务逻辑 可以替换成自己需要的log.info("syncToElasticsearch startId:{}", startId);List<News> newsList = newsService.getByIdRange(startId, pageSize);log.info("syncToElasticsearch newsList size:{}", newsList.size());if (CollectionUtils.isEmpty(newsList)) {break;}newsEsService.bulkUpsertToElasticsearch(getNewsEsDTOList(newsList));// 更新startIdstartId = newsList.get(newsList.size() - 1).getId() + 1;log.info("Synced {} Newss to Elasticsearch, current id is:{}", newsList.size(), startId);}} catch (Exception e) {log.error("Error occurred during News data synchronization to Elasticsearch.", e);return false;}log.info("Data synchronization to Elasticsearch completed.");return true;}
mapper:
public interface NewsMapper extends BaseMapper<News> {/*** 获取最小和最大id值的范围** @return*/@Select("SELECT MIN(id) AS minId, MAX(id) AS maxId FROM news")IdRange getIdRange();
}
newsService:
public List<News> getByIdRange(long startId, long pageSize) {if (startId <= 0 || pageSize <= 0) {return Collections.emptyList();}return this.list(new LambdaQueryWrapper<News>().ge(News::getId, startId).orderByAsc(News::getId).last("limit " + pageSize));}
实体类定义:
@Data
public class IdRange {private Long minId;private Long maxId;
}
为什么不直接用分页?
页面深度越大查询性能越慢,当表有大量数据时处理后面的数据会很耗时。
相关文章:
MySQL按序批量操作大量数据
MySQL按序批量操作大量数据(Java、springboot、mybatisplus、ElasticSearch) 以同步全量MySQL数据到ElasticSearch为例。 核心代码 业务逻辑: public boolean syncToElasticsearch() {log.info("Starting data synchronization to El…...
strict-origin-when-cross-origin
严格限制同源策略 (1)允许服务器的同源IP地址访问 (2)允许Referer --- 后端服务器要配置...
【置顶】 本博博文汇总
文章目录 前言音视频ijkplayer源码分析FFmpeg、音视频协议Andriod系统音视频框架C、C Android&Java源码分析、绘制、渲染Dalvik、Art虚拟机Java并发 计算机基础操作系统计算机网络设计模式、数据结构、算法 前言 23年底了,想来也工作十年,也一直在c…...
react.js源码二
三、调度Scheduler scheduling(调度)是fiber reconciliation的一个过程,主要决定应该在何时做什么?在stack reconciler中,reconciliation是“一气呵成”,对于函数来说,这没什么问题,因为我们只想要函数的运行结果,但对于UI来说还需要考虑以下问题: 并不是所有的state更…...
如何学习英语
前言 首先写一些自己的感言吧,其实从大学的时候就在不断地听英语,学英语,但是到毕业十几年后,英语一直没起到什么作用,当然最有作用的时候就是几次英语面试吧。 工作之后有一段学习英语的经历,当时花费了…...
robot测试自动化
一. 安装 黑羽robot 首先确保你电脑上安装好了 Python 3.7 或者 3.8 版本的解释器 hyrobot 使用说明1 | 白月黑羽 安装RF 黑羽robot基于Robot Framework ,所以必须先安装RobotFramework 直接执行如下Pip命令即可: pip install robotframework...
Linux---重定向命令
1. 重定向命令的介绍 重定向也称为输出重定向,把在终端执行命令的结果保存到目标文件。 2. 重定向命令的使用 命令说明>如果文件存在会覆盖原有文件内容,相当于文件操作中的‘w’模式>>如果文件存在会追加写入文件末尾,相当于文件…...
小区生活污水处理需要哪些设备和工艺
在小区生活中,污水处理是一个非常重要的环节,它关乎到环境的保护和居民的生活质量。因此,了解小区生活污水处理所需要的设备和工艺是至关重要的。 首先,在小区生活污水处理中,需要用到的设备包括污水收集系统、初级沉淀…...
【高性能计算】Cpp + Eigen + Intel MKL + 函数写成传引用
CUDA加速原理:CUDA编程学习:自定义Pytorch+cpp/cuda extension 高质量C++进阶[2]:如何让线性代数加速1000倍? 【gcc, cmake, eigen, opencv,ubuntu】三.eigen和mkl安装和使用 Linux下MKL库的安装部署与使用,并利用cmake编译器调用MKL库去提升eigen库的计算速度 Eigen库…...
【教学类-05-02】20231216 (比大小> <=)X-Y之间的比大小88题(补全88格子,有空格分割提示)
作品展示: 背景需求: 1、以前做过一份比大小的题目 【教学类-05-01】20211018 Python VSC 大班 数字比大小(> <)_vsc比较3位数大小-CSDN博客文章浏览阅读674次。【教学类-05-01】20211018 Python VSC 大班…...
【Spark精讲】Spark与MapReduce对比
目录 对比总结 MapReduce流程 编辑 MapTask流程 ReduceTask流程 MapReduce原理 阶段划分 Map shuffle Partition Collector Sort Spill Merge Reduce shuffle Copy Merge Sort 对比总结 Map端读取文件:都是需要通过split概念来进行逻辑切片&…...
SQL错题集3
1.薪水第二多的员工的emp_no以及其对应的薪水salary limit a,b 其中a表示查询数据的起始位置,b表示返回的数量。 (MySQL数据库中的记录是从0开始的) 注意从0开始 2.员工编号emp_no为10001其自入职以来的薪水salary涨幅值growth 聚合函数不能…...
Elasticsearch:使用 OpenAI 生成嵌入并进行向量搜索 - nodejs
在我之前的文章: Elasticsearch:使用 Open AI 和 Langchain 的 RAG - Retrieval Augmented Generation (一)(二)(三)(四) 我详细地描述了如何使用…...
[python高级编程]:02-类
此系列主要用于记录Python学习过程中查阅的优秀文章,均为索引方式。其中内容只针对本作者一人,作者熟悉了解的内容不再重复记录。 目录 01-装饰器 overload -- 方法重载 02-多态 多态和鸭子类型 03-设计模式 抽象基类和接口 01-装饰器 overload -- 方…...
java.lang.UnsupportedOperationException异常解决
在执行如下代码时,发现当apps.add("...");代码执行时,会报java.lang.UnsupportedOperationException错误 List<String> apps Arrays.asList("...");apps.add("..."); 问题出现的原因如下: 1、ArrayLi…...
openmediavault debian linux安装配置企业私有网盘(三 )——raid5与btrfs文件系统无损原数据扩容
一、适用环境 1、企业自有物理专业服务器,一些敏感数据不外流时,使用openmediavault自建NAS系统; 2、在虚拟化环境中自建NAS系统,用于内网办公,或出差外网办公时,企业内的文件共享; 3、虚拟化环…...
Two Phase Termination(两阶段)设计模式
Two Phase Termination设计模式是针对任务由两个环节组成,第一个环节是处理业务相关的内容,第二个阶段是处理任务结束时的同步、释放资源等操作。在进行两阶段终结的时候,需要考虑: 第二阶段终止操作必须保证线程安全。 要百分百…...
闲人闲谈PS之四十九——PLM和SAP集成常见的问题
惯例闲话:天气突变,没想到珠三角也骤降了10几度,昨晚还吹风扇模式,早上起来一下子感觉丝丝凉意。闲人还是喜欢冬天,冷,能让人思维清晰,提高工作效率。趁着天气适宜,赶紧加班擦屁股去…...
帆软BI目录
数据导入ORACLE库 写法 SELECT * FROM (SELECT a.id ,a.expandType,a.parentId,a.displayName,a.sortIndex,LEVEL lv ,replace(sys_connect_by_path(displayName,//),//Dec-Entry_Management//,) AS 路径FROM FINE_AUTHORITY_OBJECT aSTART WITH a.id decision-directory-ro…...
(第8天)保姆级 PL/SQL Developer 安装与配置
PL/SQL Developer 安装与配置(第8天) 咱们前面分享了很多 Oracle 数据库的安装,但是还没有正式使用过 Oracle 数据库,怎么连接 Oracle 数据库?今天就来讲讲我学习中比较常用的 Oracle 数据库连接工具:PL/SQL DEVELOPER。 PL/SQL Developer 的安装和配置对于新手来说还是…...
麦橘超然Flux控制台快速体验:输入文字秒出高清图片
麦橘超然Flux控制台快速体验:输入文字秒出高清图片 1. 为什么选择Flux控制台 如果你正在寻找一个简单高效的AI图像生成工具,麦橘超然Flux控制台值得考虑。这个基于DiffSynth-Studio构建的Web服务,集成了majicflus_v1模型,通过fl…...
新手别慌!手把手教你用嘉立创EDA专业版搞定蓝桥杯平衡车PCB布局布线
从零到精通:嘉立创EDA专业版实战蓝桥杯平衡车PCB设计全攻略 第一次接触蓝桥杯电子设计竞赛的平衡车项目时,面对密密麻麻的元器件和错综复杂的布线要求,很多同学都会感到无从下手。本文将带你一步步攻克这个看似复杂的PCB设计任务,…...
Webflux fromXXX对比
Mono.fromFuture和Mono.fromSupplier 刚开始尝试使用 Spring WebFlux 的时候,很多人都会使用 Mono.fromFuture() 将异步请求转成 Mono 对象,或者 Mono.fromSupplier() 将请求转成 MOno 对象,这两种方式在响应式编程 中都是不建议的࿰…...
告别重复造轮子,用快马ai一键生成tomcat高效开发工具集与配置模板
今天想和大家分享一个提升Tomcat开发效率的小技巧。作为一个经常和Tomcat打交道的开发者,我发现每次新建项目都要重复写一些基础工具类,特别浪费时间。最近在InsCode(快马)平台上尝试用AI生成了一套可复用的工具集,效果很不错。 数据库连接池…...
射频电路50Ω阻抗匹配原理与工程实践
射频电路中50Ω阻抗匹配的工程学解析1. 射频传输线阻抗标准的历史渊源1.1 同轴电缆的阻抗优化历程1929年贝尔实验室的系列实验揭示了同轴电缆的两个关键阻抗值:30欧姆可实现最大功率传输,77欧姆则对应最小传输损耗。这两个数值的算术平均值为53.5欧姆&am…...
MecanumBase:轻量级全向轮运动学逆解C库
1. MecanumBase 库概述MecanumBase 是一个专为全向移动机器人设计的轻量级底层控制库,核心目标是将复杂的轮式运动学解耦为工程师可直观理解的输入指令:平移方向角(θ)与旋转角速度(ω)。该库不依赖任何特定…...
Anthropic调整Claude使用限制以缓解高峰时段需求压力
Anthropic公司周三调整了Claude客户的使用限制策略,在高峰需求时段降低服务功率,以平衡用户需求与其服务交付能力。Anthropic技术团队成员Thariq Shihipar在社交媒体上发布消息称:"为了管理Claude日益增长的需求,我们正在调整…...
深度解析 ConcurrentHashMap 1.8:put 与 get 核心流程全解
在 Java 并发编程中,ConcurrentHashMap 是线程安全的高频使用集合,相比线程不安全的 HashMap、效率低下的 HashTable(全锁),JDK 1.8 版本的 ConcurrentHashMap 做了底层结构重构和锁机制优化,成为高并发场景…...
颠覆PDF转换体验:Marker无缝实现25页/秒全场景文档格式精准迁移
颠覆PDF转换体验:Marker无缝实现25页/秒全场景文档格式精准迁移 【免费下载链接】marker 一个高效、准确的工具,能够将 PDF 和图像快速转换为 Markdown、JSON 和 HTML 格式,支持多语言和复杂布局处理,可选集成 LLM 提升精度&#…...
告别编译踩坑:详解GMP交叉编译中DESTDIR和.la文件的那些‘坑’与正确用法
告别编译踩坑:详解GMP交叉编译中DESTDIR和.la文件的那些‘坑’与正确用法 交叉编译是嵌入式开发和跨平台构建中的常见需求,但其中隐藏的陷阱往往让开发者头疼不已。特别是像GMP这样的基础数学库,一旦编译或部署环节出现问题,可能导…...
