专栏名称: macrozheng
专注Java技术分享,解析优质开源项目。涵盖SpringBoot、SpringCloud、Docker、K8S等实用技术,作者Github开源项目mall(50K+Star)。
今天看啥  ›  专栏  ›  macrozheng

300 秒到 4 秒,如何将 MySQL 批量写入的耗时缩短 99%?

macrozheng  · 公众号  · 数据库  · 2025-02-11 10:32
    

主要观点总结

本文介绍了如何将导入操作耗时从300秒优化到4秒,涉及XML文件导入到MySQL数据库的过程。文章涵盖了批处理、异步写、Disruptor并发队列等优化方法。

关键观点总结

关键观点1: 优化起点和基础实现

文章开始时介绍了基础实现的性能问题,包括环境配置和代码运行的情况。

关键观点2: 批处理优化

通过开启MySQL的批处理,将多条SQL语句合并在一起执行,减少了网络传输和数据库进程写数据的成本。

关键观点3: 异步写和Disruptor并发队列

通过引入Disruptor并发队列实现异步写,进一步缩短了请求方的等待时间,提高了性能。

关键观点4: 其他优化方向

提到了XML解析的优化、Disruptor内存占用的优化以及MySQL写性能的优化,并给出了相应的解决方案和建议。


文章预览

Boot+Cloud项目学习: macrozheng.com 最近碰到一个场景,从 XML 文件导入 6 万多条数据到 MySQL 中。需求并不复杂,基于 XML 文件和 xlsx 文件的相似性,其实这就是一个老生常谈的数据导入问题。 本文将介绍我如何将导入操作耗时从 300 秒优化到 4 秒。 代码运行的环境 Java 代码在笔记本上运行,MySQL 在局域网内的虚拟机上。 笔记本配置八核 i9 2.3 GHz,16 GB 内存,最近气温偏高,CPU 存在降频现象,对执行耗时有一定影响。 MySQL 数据库运行在 VirtualBox 虚拟机内。虚拟机分配了 4 核 4 GB 内存,但宿主机硬件性能比较羸弱,导致 MySQL 写入耗时较长。 JDK 采用 21 版本,MySQL 采用 8.0 版本。 在这个环境配置下,从 XML 文件中读取一条数据耗时 0.08 秒,向 MySQL 导入一条数据耗时 0.5 秒。 基础实现的性能 基础实现就是过程式处理方式。 void   importData ()   {     Document  ………………………………

原文地址:访问原文地址
快照地址: 访问文章快照
总结与预览地址:访问总结与预览