在Java 中应该怎么处理百万级数据插入 、删除

在Java中处理百万级数据的插入和删除操作时,需结合数据库优化、内存管理及并发控制等策略。以下是具体实践方案:

  • 使用连接池:管理数据库连接,避免频繁创建/销毁连接
  • 手动提交事务:事务管理关闭自动提交,将多个插入操作封装在一个事务中,减少数据库IO次数
  • 批处理:通过将多条SQL语句合并为一个批次提交,减少网络开销和数据库事务次数。建议每1000-2000条数据执行一次批处理。
  • 分页处理大数据量:避免一次性将大数据量加载进内存,导致OOM
  • 多线程并行处理:使用线程池(如ExecutorService)分片处理数据,充分利用多核CPU

批量插入:
JDBC的批量插入功能是提高插入性能的一个关键方法。通过PreparedStatement对象的addBatch()executeBatch()方法。
Mybatis批量插入:(1)使用 MyBatis-Plus 的 saveBatch 方法(2)使用 <foreach> 标签实现批量插入。

<insert id="batchInsert" parameterType="java.util.List">
    INSERT INTO my_table (column1, column2) VALUES
    <foreach collection="list" item="item" separator=",">
        (#{item.column1}, #{item.column2})
    </foreach>
  </insert>

批量删除:(1)查找数据的共性条件删除 (2)采用类似批量插入的方式批量删除数据

如果是导入、导出,(1)导入文件使用CSV格式(2)使用EasyExcel等工具分Sheet页读取,结合多线程并行导入(3)流式处理
避免一次性加载全部数据到内存,采用流式API(如Java 8 Stream)逐行处理

MYSQL:在 MySQL 的 JDBC URL 中添加 rewriteBatchedStatements=true 参数,可以让 MySQL 驱动将多条插入语句合并为一条,从而减少网络和数据库的开销。

posted @ 2025-03-12 16:05  抒写  阅读(287)  评论(0)    收藏  举报