有一个需求更新5W数据,求一个好的方案

有一个需求更新5W数据,求一个好的方案,java,mysql,redis

可以采用数据库批量更新,比如一次更新50条

package me.gacl.demo;

import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.Statement;
import me.gacl.utils.JdbcUtils;
import org.junit.Test;

/**

  • @ClassName: JdbcBatchHandleByStatement
  • @Description: 使用Statement实现JDBC批处理操作
  • @author: 孤傲苍狼
  • @date: 2014-9-20 下午10:05:45
    *
    */
    public class JdbcBatchHandleByStatement {

    @Test
    public void testJdbcBatchHandleByStatement(){
    Connection conn = null;
    Statement st = null;
    ResultSet rs = null;
    try{
    conn = JdbcUtils.getConnection();
    String sql1 = "insert into testbatch(id,name) values(1,'aaa')";
    String sql2 = "insert into testbatch(id,name) values(2,'bbb')";
    String sql3 = "insert into testbatch(id,name) values(3,'CCC')";
    String sql4 = "insert into testbatch(id,name) values(4,'DDD')";
    String sql5 = "update testbatch set name='gacl' where id=1";
    String sql6 = "insert into testbatch(id,name) values(5,'FFF')";
    String sql7 = "delete from testbatch where id=2";
    st = conn.createStatement();
    //添加要批量执行的SQL
    st.addBatch(sql1);
    st.addBatch(sql2);
    st.addBatch(sql3);
    st.addBatch(sql4);
    st.addBatch(sql5);
    st.addBatch(sql6);
    st.addBatch(sql7);
    //执行批处理SQL语句
    st.executeBatch();
    //清除批处理命令
    st.clearBatch();
    }catch (Exception e) {
    e.printStackTrace();
    }finally{
    JdbcUtils.release(conn, st, rs);
    }
    }
    }

可以根据实际需要,将5万条数据集合截取为10个集合,每个集合是5千数据,然后开启10个线程,每个线程链接一次数据库,sql批量更新对应的5千数据。

https://ask.csdn.net/questions/698319
这个是和你类似的场景,我当时给出的答案,你的模仿着写就行了,望采纳!

就使用jdbc原始的方法,在建立连接后,
第一步 创建statement,
第二步 设置不自动提交,开启事务,conn.setAutoCommit(false)
第三步 执行sql,直接5w条sql一次批量执行,jdbc完全支持,项目中测过30w的5万执行6次,每次一分钟左右
第四步 判断是否有异常,有异常事务回滚,没有异常执行成功。
第五步 提交conn.commit()