Java如何实现实现50万条数据插入(小霸王电脑11秒完成50万条数据插入MySQL)

此次记录使用的数据库版本为5.7,jdk为1.8,电脑配置为使用了4年8G运行的小霸王,所以速度处理上不会很快,以下跑出的运行时间仅做参考。

一、表结构如下

 二、bean、service、mapper

User实体类

@Getter
@Setter
@TableName("t_user")
@ApiModel(value = "User对象", description = "")
public class User implements Serializable {

    private static final long serialVersionUID = 1L;

    @TableId(value = "user_id", type = IdType.AUTO)
    private Integer userId;

    private String userName;

    private Integer userAge;
}

userMapper.java Mapper接口

public interface UserMapper extends BaseMapper<User> {

}
IUserService.java 
public interface IUserService extends IService<User> {
    
    //批量插入数据
    void batchInsertUser();
}
UserServiceImpl.java
@Service
public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements IUserService {}

三、无连接池,MP自带批量插入API实现

以下是通过Mybaties Plus实现的saveBatch方法插入50万条数据的代码实现:

@Service
public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements IUserService {

    public void  batchInsertUser(){
        List<User> usersList = new ArrayList<>();
        for (int i = 0; i < 500000; i++) {
            User user = new User();
            user.setUserAge(18);
            user.setUserName("LOGGER");
            usersList.add(user);
        }
        long startTimestamp = System.currentTimeMillis() / 1000;
        System.out.println("插入开始时间" + startTimestamp);
        this.saveBatch(usersList,1000);
        long endTimestamp = System.currentTimeMillis() / 1000;
        System.out.println("插入结束时间 = " + endTimestamp);
        System.out.println(endTimestamp - startTimestamp);
    }
    
}

本以为很快,执行后发现情况不对,为什么还不打印结束时间,上个厕所小憩一下~

回来之后发现终于执行完毕,控制台输出如下:

 738秒——12分钟18秒插入了50万条数据,太慢了吧。。。

 四、配置Druid连接池,继续使用该方法进行插入。

上一步只是使用了MP自带的批量插入方法,按道理来说不应该是这么个情况,那给他配个连接池试试。自己分别使用了HikariCP和Druid连接池,其中HikariCP存储50万条数据比不使用连接池花的时间还长,所以一下以Druid连接池为例。

1.首先清空数据表

-- 清空用户表
TRUNCATE table  t_user;

2.配置数据源

    # Druid连接池配置
    druid:
      initial-size: 5 # 初始连接数
      min-idle: 5 # 最小空闲连接数
      max-active: 20 # 最大连接数
      max-wait: 600000 # 获取连接的最大等待时间,毫秒
      time-between-eviction-runs-millis: 600000 # 两次连接回收扫描的时间间隔,毫秒
      min-evictable-idle-time-millis: 300000 # 连接在池中保持空闲而不被驱逐的最长时间,毫秒
      validation-query: SELECT 1 # 连接校验SQL,在连接池初始化和每次借用连接时执行该SQL进行校验
      test-while-idle: true # 申请连接时是否执行连接测试,检测连接是否有效
      test-on-borrow: false # 获得连接是否执行连接测试,检测连接是否有效
      test-on-return: false # 归还连接是否执行连接测试,检测连接是否有效
      filters: stat # 连接池的过滤器,可额外配置多个,用逗号分隔

 继续使用上述插入50万条数据的saveBatche方法的代码实现,以下是控制台输出结果。

最后花了10分钟才处理完毕,虽然快了两分钟,但还是很慢,真的不能在快了吗,不,一定还有方法。怎能就此放弃!!

 五、放弃使用saveBatch方法,自己写SQL,且开启手动提交事务。

UserMapper.java mapper层

public interface UserMapper extends BaseMapper<User> {
    /*
    * 批量插入数据
    * */
    void batchInsertUser(List<User> userList);
}

UserMapper.xml 批量插入数据的SQL

    <insert id="batchInsertUser" parameterType="java.util.List">
        INSERT INTO t_user (user_name, user_age)
        VALUES
        <foreach collection="list" item="user" separator=",">
            (#{user.userName}, #{user.userAge})
        </foreach>
    </insert>

以下是MP开启手动提交且使用自己写的SQL实现50万条数据的代码实例。

    @Autowired
    private SqlSessionFactory sqlSessionFactory;
    
    /**
     * 分批次批量插入
     * @throws IOException
     */
    @Test
    public void testBatchInsertUser() throws IOException {
        SqlSession sqlSession = sqlSessionFactory.openSession(ExecutorType.BATCH);
        String statement = "com.logger.mapper.UserMapper.batchInsertUser"; // 插入语句的 Mapper 方法路径
        System.out.println("===== 开始插入数据 =====");
        long startTime = System.currentTimeMillis();
        try {
            List<User> userList = new ArrayList<>();
            for (int i = 1; i <= 500000; i++) {
                User user = new User();
                user.setUserName("logger " + i);
                user.setUserAge((int) (Math.random() * 100));
                userList.add(user);
                if (i % 1000 == 0) {
                    sqlSession.insert(statement, userList);
                    sqlSession.commit();
                    userList.clear();
                }
            }
            long spendTime = System.currentTimeMillis()-startTime;
            System.out.println("成功插入 50 万条数据,耗时:"+spendTime+"毫秒");
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            sqlSession.close();
        }
    }

将每 1000 条数据放在一个批次中插入,能够较为有效地提高插入速度。并且为了提高插入速度,上述配置的Druid连接池,继续使用!

小tips:MP中使用SqlSession sqlSession = sqlSessionFactory.openSession(ExecutorType.BATCH);来开启手动提交,当然最后要记得关闭。

以下是控制台输出的结果:

11秒,真的震惊了我一万年,这下终于舒服了。但没有弄清楚到底是什么原因导致的速度成集合倍的增长。到底是因为手动提交还是因为执行的是自己手写的SQL导致的。那就改变一个变量且打开日志重新测试,还是自动提交事务,但执行刚刚的SQL。

    @Autowired
    private UserMapper userMapper;

    public void  batchInsertUser(){
        List<User> usersList = new ArrayList<>();
        long startTimestamp = System.currentTimeMillis() / 1000;
        System.out.println("插入开始时间" + startTimestamp);
        for (int i = 0; i < 500000; i++) {
            User user = new User();
            user.setUserAge(18);
            user.setUserName("LOGGER");
            usersList.add(user);
            if (i % 1000 == 0){
                userMapper.batchInsertUser(usersList);
                usersList.clear();
            }
        }
        //this.saveBatch(usersList,1000);
        long endTimestamp = System.currentTimeMillis() / 1000;
        System.out.println("插入结束时间 = " + endTimestamp);
        System.out.println(endTimestamp - startTimestamp);
    }

 最后仅仅花费了21秒就完成了,也就是说,插入慢的原因主要发生在SQL上。

以下是 saveBatch执行的SQL日志:

==>  Preparing: INSERT INTO t_user ( user_name, user_age ) VALUES ( ?, ? )
==> Parameters: LOGGER(String), 18(Integer)
==> Parameters: LOGGER(String), 18(Integer)
==> Parameters: LOGGER(String), 18(Integer)
==> Parameters: LOGGER(String), 18(Integer)
==> Parameters: LOGGER(String), 18(Integer)
==> Parameters: LOGGER(String), 18(Integer)
==> Parameters: LOGGER(String), 18(Integer)
==> Parameters: LOGGER(String), 18(Integer)
==> Parameters: LOGGER(String), 18(Integer)

总共打印了50万行传入的参数。。。这不就是一条一条插入嘛。

以下是自己写的SQL执行日志:

===== 开始插入数据 =====
JDBC Connection [com.alibaba.druid.proxy.jdbc.ConnectionProxyImpl@5bec3e0] will not be managed by Spring
==>  Preparing: INSERT INTO t_user (user_name, user_age) VALUES (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?) , (?, ?)
==> Parameters: logger 1(String), 31(Integer), logger 2(String), 91(Integer), logger 3(String), 59(Integer), logger 4(String), 64(Integer), logger 5(String), 55(Integer), logger 6(String), 49(Integer), logger 7(String), 2(Integer), logger 8(String), 77(Integer), logger 9(String), 45(Integer), logger 10(String), 73(Integer), logger 11(String), 52(Integer), logger 12(String), 25(Integer), logger 13(String), 31(Integer), logger 14(String), 31(Integer), logger 15(String), 50(Integer), logger 16(String), 90(Integer), logger 17(String), 14(Integer), logger 18(String), 1(Integer), logger 19(String), 79(Integer), logger 20(String), 24(Integer), logger 21(String), 87(Integer), logger 22(String), 19(Integer), logger 23(String), 82(Integer), logger 24(String), 77(Integer), logger 25(String), 47(Integer), logger 26(String), 88(Integer), logger 27(String), 26(Integer), logger 28(String), 82(Integer), logger 29(String), 91(Integer), logger 30(String), 58(Integer), logger 31(String), 56(Integer), logger 32(String), 84(Integer), logger 33(String), 84(Integer), logger 34(String), 23(Integer), logger 35(String), 78(Integer), logger 36(String), 70(Integer), logger 37(String), 94(Integer), logger 38(String), 57(Integer), logger 39(String), 9(Integer), logger 40(String), 95(Integer), logger 41(String), 54(Integer), logger 42(String), 73(Integer), logger 43(String), 40(Integer), logger 44(String), 84(Integer), logger 45(String), 76(Integer), logger 46(String), 87(Integer), logger 47(String), 23(Integer), logger 48(String), 13(Integer), logger 49(String), 50(Integer), logger 50(String), 6(Integer), logger 51(String), 82(Integer), logger 52(String), 6(Integer), logger 53(String), 5(Integer), logger 54(String), 95(Integer), logger 55(String), 28(Integer), logger 56(String), 69(Integer), logger 57(String), 31(Integer), logger 58(String), 94(Integer), logger 59(String), 45(Integer), logger 60(String), 26(Integer), logger 61(String), 25(Integer), logger 62(String), 16(Integer), logger 63(String), 11(Integer), logger 64(String), 64(Integer), logger 65(String), 43(Integer), logger 66(String), 75(Integer), logger 67(String), 93(Integer), logger 68(String), 86(Integer), logger 69(String), 85(Integer), logger 70(String), 60(Integer), logger 71(String), 4(Integer), logger 72(String), 21(Integer), logger 73(String), 23(Integer), logger 74(String), 81(Integer), logger 75(String), 0(Integer), logger 76(String), 98(Integer), logger 77(String), 72(Integer), logger 78(String), 11(Integer), logger 79(String), 75(Integer), logger 80(String), 78(Integer), logger 81(String), 36(Integer), logger 82(String), 57(Integer), logger 83(String), 91(Integer), logger 84(String), 35(Integer), logger 85(String), 30(Integer), logger 86(String), 68(Integer), logger 87(String), 43(Integer), logger 88(String), 80(Integer), logger 89(String), 46(Integer), logger 90(String), 48(Integer), logger 91(String), 1(Integer), logger 92(String), 87(Integer), logger 93(String), 62(Integer), logger 94(String), 2(Integer), logger 95(String), 81(Integer), logger 96(String), 39(Integer), logger 97(String), 30(Integer), logger 98(String), 1(Integer), logger 99(String), 98(Integer), logger 100(String), 47(Integer), logger 101(String), 39(Integer), logger 102(String), 28(Integer), logger 103(String), 2(Integer), logger 104(String), 62(Integer), logger 105(String), 77(Integer), logger 106(String), 33(Integer), logger 107(String), 98(Integer), logger 108(String), 65(Integer), logger 109(String), 87(Integer), logger 110(String), 7(Integer), logger 111(String), 17(Integer), logger 112(String), 74(Integer), logger 113(String), 48(Integer), logger 114(String), 53(Integer), logger 115(String), 66(Integer), logger 116(String), 79(Integer), logger 117(String), 7(Integer), logger 118(String), 16(Integer), logger 119(String), 24(Integer), logger 120(String), 85(Integer), logger 121(String), 72(Integer), logger 122(String), 24(Integer), logger 123(String), 66(Integer), logger 124(String), 13(Integer), logger 125(String), 58(Integer), logger 126(String), 67(Integer), logger 127(String), 66(Integer), logger 128(String), 85(Integer), logger 129(String), 3(Integer), logger 130(String), 39(Integer), logger 131(String), 34(Integer), logger 132(String), 11(Integer), logger 133(String), 0(Integer), logger 134(String), 62(Integer), logger 135(String), 57(Integer), logger 136(String), 48(Integer), logger 137(String), 81(Integer), logger 138(String), 6(Integer), logger 139(String), 58(Integer), logger 140(String), 27(Integer), logger 141(String), 85(Integer), logger 142(String), 4(Integer), logger 143(String), 82(Integer), logger 144(String), 92(Integer), logger 145(String), 62(Integer), logger 146(String), 96(Integer), logger 147(String), 3(Integer), logger 148(String), 14(Integer), logger 149(String), 47(Integer), logger 150(String), 6(Integer), logger 151(String), 2(Integer), logger 152(String), 32(Integer), logger 153(String), 95(Integer), logger 154(String), 89(Integer), logger 155(String), 13(Integer), logger 156(String), 61(Integer), logger 157(String), 5(Integer), logger 158(String), 79(Integer), logger 159(String), 29(Integer), logger 160(String), 10(Integer), logger 161(String), 89(Integer), logger 162(String), 11(Integer), logger 163(String), 79(Integer), logger 164(String), 81(Integer), logger 165(String), 16(Integer), logger 166(String), 70(Integer), logger 167(String), 49(Integer), logger 168(String), 84(Integer), logger 169(String), 79(Integer), logger 170(String), 70(Integer), logger 171(String), 52(Integer), logger 172(String), 54(Integer), logger 173(String), 11(Integer), logger 174(String), 93(Integer), logger 175(String), 18(Integer), logger 176(String), 36(Integer), logger 177(String), 90(Integer), logger 178(String), 11(Integer), logger 179(String), 40(Integer), logger 180(String), 63(Integer), logger 181(String), 13(Integer), logger 182(String), 89(Integer), logger 183(String), 38(Integer), logger 184(String), 9(Integer), logger 185(String), 52(Integer), logger 186(String), 66(Integer), logger 187(String), 21(Integer), logger 188(String), 92(Integer), logger 189(String), 29(Integer), logger 190(String), 72(Integer), logger 191(String), 8(Integer), logger 192(String), 76(Integer), logger 193(String), 27(Integer), logger 194(String), 57(Integer), logger 195(String), 63(Integer), logger 196(String), 67(Integer), logger 197(String), 48(Integer), logger 198(String), 73(Integer), logger 199(String), 4(Integer), logger 200(String), 40(Integer), logger 201(String), 44(Integer), logger 202(String), 79(Integer), logger 203(String), 25(Integer), logger 204(String), 56(Integer), logger 205(String), 99(Integer), logger 206(String), 96(Integer), logger 207(String), 13(Integer), logger 208(String), 69(Integer), logger 209(String), 42(Integer), logger 210(String), 88(Integer), logger 211(String), 82(Integer), logger 212(String), 66(Integer), logger 213(String), 42(Integer), logger 214(String), 18(Integer), logger 215(String), 56(Integer), logger 216(String), 39(Integer), logger 217(String), 98(Integer), logger 218(String), 40(Integer), logger 219(String), 9(Integer), logger 220(String), 1(Integer), logger 221(String), 5(Integer), logger 222(String), 22(Integer), logger 223(String), 55(Integer), logger 224(String), 58(Integer), logger 225(String), 46(Integer), logger 226(String), 80(Integer), logger 227(String), 3(Integer), logger 228(String), 63(Integer), logger 229(String), 92(Integer), logger 230(String), 43(Integer), logger 231(String), 32(Integer), logger 232(String), 53(Integer), logger 233(String), 58(Integer), logger 234(String), 79(Integer), logger 235(String), 33(Integer), logger 236(String), 22(Integer), logger 237(String), 5(Integer), logger 238(String), 45(Integer), logger 239(String), 43(Integer), logger 240(String), 67(Integer), logger 241(String), 16(Integer), logger 242(String), 44(Integer), logger 243(String), 50(Integer), logger 244(String), 71(Integer), logger 245(String), 79(Integer), logger 246(String), 92(Integer), logger 247(String), 94(Integer), logger 248(String), 6(Integer), logger 249(String), 96(Integer), logger 250(String), 75(Integer), logger 251(String), 91(Integer), logger 252(String), 58(Integer), logger 253(String), 11(Integer), logger 254(String), 50(Integer), logger 255(String), 89(Integer), logger 256(String), 11(Integer), logger 257(String), 63(Integer), logger 258(String), 34(Integer), logger 259(String), 68(Integer), logger 260(String), 50(Integer), logger 261(String), 34(Integer), logger 262(String), 50(Integer), logger 263(String), 96(Integer), logger 264(String), 60(Integer), logger 265(String), 23(Integer), logger 266(String), 38(Integer), logger 267(String), 20(Integer), logger 268(String), 75(Integer), logger 269(String), 69(Integer), logger 270(String), 3(Integer), logger 271(String), 45(Integer), logger 272(String), 17(Integer), logger 273(String), 4(Integer), logger 274(String), 14(Integer), logger 275(String), 58(Integer), logger 276(String), 52(Integer), logger 277(String), 45(Integer), logger 278(String), 25(Integer), logger 279(String), 88(Integer), logger 280(String), 94(Integer), logger 281(String), 41(Integer), logger 282(String), 62(Integer), logger 283(String), 60(Integer), logger 284(String), 88(Integer), logger 285(String), 92(Integer), logger 286(String), 41(Integer), logger 287(String), 87(Integer), logger 288(String), 81(Integer), logger 289(String), 5(Integer), logger 290(String), 17(Integer), logger 291(String), 68(Integer), logger 292(String), 28(Integer), logger 293(String), 27(Integer), logger 294(String), 50(Integer), logger 295(String), 3(Integer), logger 296(String), 61(Integer), logger 297(String), 86(Integer), logger 298(String), 12(Integer), logger 299(String), 5(Integer), logger 300(String), 64(Integer), logger 301(String), 93(Integer), logger 302(String), 93(Integer), logger 303(String), 13(Integer), logger 304(String), 29(Integer), logger 305(String), 31(Integer), logger 306(String), 69(Integer), logger 307(String), 15(Integer), logger 308(String), 48(Integer), logger 309(String), 26(Integer), logger 310(String), 43(Integer), logger 311(String), 71(Integer), logger 312(String), 62(Integer), logger 313(String), 99(Integer), logger 314(String), 90(Integer), logger 315(String), 95(Integer), logger 316(String), 66(Integer), logger 317(String), 62(Integer), logger 318(String), 0(Integer), logger 319(String), 91(Integer), logger 320(String), 24(Integer), logger 321(String), 63(Integer), logger 322(String), 8(Integer), logger 323(String), 67(Integer), logger 324(String), 71(Integer), logger 325(String), 94(Integer), logger 326(String), 91(Integer), logger 327(String), 20(Integer), logger 328(String), 97(Integer), logger 329(String), 98(Integer), logger 330(String), 25(Integer), logger 331(String), 8(Integer), logger 332(String), 72(Integer), logger 333(String), 55(Integer), logger 334(String), 70(Integer), logger 335(String), 22(Integer), logger 336(String), 71(Integer), logger 337(String), 21(Integer), logger 338(String), 58(Integer), logger 339(String), 49(Integer), logger 340(String), 35(Integer), logger 341(String), 89(Integer), logger 342(String), 96(Integer), logger 343(String), 4(Integer), logger 344(String), 36(Integer), logger 345(String), 75(Integer), logger 346(String), 47(Integer), logger 347(String), 92(Integer), logger 348(String), 41(Integer), logger 349(String), 21(Integer), logger 350(String), 26(Integer), logger 351(String), 47(Integer), logger 352(String), 64(Integer), logger 353(String), 63(Integer), logger 354(String), 14(Integer), logger 355(String), 19(Integer), logger 356(String), 4(Integer), logger 357(String), 54(Integer), logger 358(String), 39(Integer), logger 359(String), 16(Integer), logger 360(String), 61(Integer), logger 361(String), 92(Integer), logger 362(String), 82(Integer), logger 363(String), 92(Integer), logger 364(String), 52(Integer), logger 365(String), 41(Integer), logger 366(String), 99(Integer), logger 367(String), 76(Integer), logger 368(String), 38(Integer), logger 369(String), 79(Integer), logger 370(String), 69(Integer), logger 371(String), 59(Integer), logger 372(String), 17(Integer), logger 373(String), 19(Integer), logger 374(String), 7(Integer), logger 375(String), 30(Integer), logger 376(String), 32(Integer), logger 377(String), 7(Integer), logger 378(String), 36(Integer), logger 379(String), 22(Integer), logger 380(String), 86(Integer), logger 381(String), 4(Integer), logger 382(String), 7(Integer), logger 383(String), 60(Integer), logger 384(String), 64(Integer), logger 385(String), 65(Integer), logger 386(String), 53(Integer), logger 387(String), 37(Integer), logger 388(String), 12(Integer), logger 389(String), 76(Integer), logger 390(String), 41(Integer), logger 391(String), 28(Integer), logger 392(String), 28(Integer), logger 393(String), 91(Integer), logger 394(String), 98(Integer), logger 395(String), 32(Integer), logger 396(String), 90(Integer), logger 397(String), 1(Integer), logger 398(String), 76(Integer), logger 399(String), 79(Integer), logger 400(String), 40(Integer), logger 401(String), 1(Integer), logger 402(String), 21(Integer), logger 403(String), 90(Integer), logger 404(String), 42(Integer), logger 405(String), 87(Integer), logger 406(String), 41(Integer), logger 407(String), 53(Integer), logger 408(String), 1(Integer), logger 409(String), 85(Integer), logger 410(String), 26(Integer), logger 411(String), 14(Integer), logger 412(String), 71(Integer), logger 413(String), 51(Integer), logger 414(String), 52(Integer), logger 415(String), 83(Integer), logger 416(String), 33(Integer), logger 417(String), 91(Integer), logger 418(String), 52(Integer), logger 419(String), 74(Integer), logger 420(String), 67(Integer), logger 421(String), 56(Integer), logger 422(String), 2(Integer), logger 423(String), 52(Integer), logger 424(String), 15(Integer), logger 425(String), 38(Integer), logger 426(String), 63(Integer), logger 427(String), 11(Integer), logger 428(String), 87(Integer), logger 429(String), 39(Integer), logger 430(String), 59(Integer), logger 431(String), 36(Integer), logger 432(String), 15(Integer), logger 433(String), 19(Integer), logger 434(String), 85(Integer), logger 435(String), 34(Integer), logger 436(String), 43(Integer), logger 437(String), 38(Integer), logger 438(String), 97(Integer), logger 439(String), 42(Integer), logger 440(String), 97(Integer), logger 441(String), 92(Integer), logger 442(String), 25(Integer), logger 443(String), 59(Integer), logger 444(String), 58(Integer), logger 445(String), 2(Integer), logger 446(String), 37(Integer), logger 447(String), 27(Integer), logger 448(String), 49(Integer), logger 449(String), 69(Integer), logger 450(String), 80(Integer), logger 451(String), 43(Integer), logger 452(String), 82(Integer), logger 453(String), 18(Integer), logger 454(String), 93(Integer), logger 455(String), 63(Integer), logger 456(String), 64(Integer), logger 457(String), 49(Integer), logger 458(String), 25(Integer), logger 459(String), 37(Integer), logger 460(String), 75(Integer), logger 461(String), 14(Integer), logger 462(String), 35(Integer), logger 463(String), 74(Integer), logger 464(String), 69(Integer), logger 465(String), 55(Integer), logger 466(String), 16(Integer), logger 467(String), 59(Integer), logger 468(String), 9(Integer), logger 469(String), 10(Integer), logger 470(String), 25(Integer), logger 471(String), 61(Integer), logger 472(String), 75(Integer), logger 473(String), 75(Integer), logger 474(String), 71(Integer), logger 475(String), 46(Integer), logger 476(String), 31(Integer), logger 477(String), 21(Integer), logger 478(String), 82(Integer), logger 479(String), 96(Integer), logger 480(String), 11(Integer), logger 481(String), 13(Integer), logger 482(String), 0(Integer), logger 483(String), 52(Integer), logger 484(String), 93(Integer), logger 485(String), 44(Integer), logger 486(String), 83(Integer), logger 487(String), 51(Integer), logger 488(String), 49(Integer), logger 489(String), 97(Integer), logger 490(String), 97(Integer), logger 491(String), 93(Integer), logger 492(String), 51(Integer), logger 493(String), 79(Integer), logger 494(String), 7(Integer), logger 495(String), 86(Integer), logger 496(String), 38(Integer), logger 497(String), 11(Integer), logger 498(String), 27(Integer), logger 499(String), 53(Integer), logger 500(String), 75(Integer), logger 501(String), 66(Integer), logger 502(String), 74(Integer), logger 503(String), 18(Integer), logger 504(String), 11(Integer), logger 505(String), 34(Integer), logger 506(String), 62(Integer), logger 507(String), 15(Integer), logger 508(String), 40(Integer), logger 509(String), 39(Integer), logger 510(String), 48(Integer), logger 511(String), 44(Integer), logger 512(String), 17(Integer), logger 513(String), 17(Integer), logger 514(String), 45(Integer), logger 515(String), 67(Integer), logger 516(String), 64(Integer), logger 517(String), 24(Integer), logger 518(String), 93(Integer), logger 519(String), 91(Integer), logger 520(String), 8(Integer), logger 521(String), 17(Integer), logger 522(String), 94(Integer), logger 523(String), 0(Integer), logger 524(String), 35(Integer), logger 525(String), 38(Integer), logger 526(String), 3(Integer), logger 527(String), 12(Integer), logger 528(String), 83(Integer), logger 529(String), 81(Integer), logger 530(String), 74(Integer), logger 531(String), 8(Integer), logger 532(String), 40(Integer), logger 533(String), 68(Integer), logger 534(String), 60(Integer), logger 535(String), 54(Integer), logger 536(String), 47(Integer), logger 537(String), 45(Integer), logger 538(String), 96(Integer), logger 539(String), 45(Integer), logger 540(String), 75(Integer), logger 541(String), 29(Integer), logger 542(String), 68(Integer), logger 543(String), 67(Integer), logger 544(String), 65(Integer), logger 545(String), 82(Integer), logger 546(String), 24(Integer), logger 547(String), 3(Integer), logger 548(String), 15(Integer), logger 549(String), 36(Integer), logger 550(String), 79(Integer), logger 551(String), 35(Integer), logger 552(String), 4(Integer), logger 553(String), 33(Integer), logger 554(String), 92(Integer), logger 555(String), 18(Integer), logger 556(String), 62(Integer), logger 557(String), 29(Integer), logger 558(String), 19(Integer), logger 559(String), 28(Integer), logger 560(String), 96(Integer), logger 561(String), 86(Integer), logger 562(String), 74(Integer), logger 563(String), 15(Integer), logger 564(String), 8(Integer), logger 565(String), 59(Integer), logger 566(String), 57(Integer), logger 567(String), 35(Integer), logger 568(String), 61(Integer), logger 569(String), 96(Integer), logger 570(String), 47(Integer), logger 571(String), 55(Integer), logger 572(String), 65(Integer), logger 573(String), 99(Integer), logger 574(String), 90(Integer), logger 575(String), 7(Integer), logger 576(String), 79(Integer), logger 577(String), 66(Integer), logger 578(String), 48(Integer), logger 579(String), 34(Integer), logger 580(String), 75(Integer), logger 581(String), 45(Integer), logger 582(String), 40(Integer), logger 583(String), 26(Integer), logger 584(String), 5(Integer), logger 585(String), 19(Integer), logger 586(String), 13(Integer), logger 587(String), 59(Integer), logger 588(String), 89(Integer), logger 589(String), 36(Integer), logger 590(String), 78(Integer), logger 591(String), 77(Integer), logger 592(String), 46(Integer), logger 593(String), 39(Integer), logger 594(String), 46(Integer), logger 595(String), 91(Integer), logger 596(String), 56(Integer), logger 597(String), 84(Integer), logger 598(String), 18(Integer), logger 599(String), 91(Integer), logger 600(String), 63(Integer), logger 601(String), 65(Integer), logger 602(String), 61(Integer), logger 603(String), 38(Integer), logger 604(String), 2(Integer), logger 605(String), 13(Integer), logger 606(String), 56(Integer), logger 607(String), 90(Integer), logger 608(String), 64(Integer), logger 609(String), 58(Integer), logger 610(String), 84(Integer), logger 611(String), 35(Integer), logger 612(String), 69(Integer), logger 613(String), 34(Integer), logger 614(String), 44(Integer), logger 615(String), 41(Integer), logger 616(String), 94(Integer), logger 617(String), 76(Integer), logger 618(String), 32(Integer), logger 619(String), 38(Integer), logger 620(String), 30(Integer), logger 621(String), 17(Integer), logger 622(String), 16(Integer), logger 623(String), 9(Integer), logger 624(String), 41(Integer), logger 625(String), 28(Integer), logger 626(String), 77(Integer), logger 627(String), 33(Integer), logger 628(String), 29(Integer), logger 629(String), 28(Integer), logger 630(String), 19(Integer), logger 631(String), 64(Integer), logger 632(String), 16(Integer), logger 633(String), 4(Integer), logger 634(String), 77(Integer), logger 635(String), 21(Integer), logger 636(String), 92(Integer), logger 637(String), 40(Integer), logger 638(String), 4(Integer), logger 639(String), 86(Integer), logger 640(String), 77(Integer), logger 641(String), 75(Integer), logger 642(String), 36(Integer), logger 643(String), 41(Integer), logger 644(String), 14(Integer), logger 645(String), 55(Integer), logger 646(String), 91(Integer), logger 647(String), 57(Integer), logger 648(String), 98(Integer), logger 649(String), 37(Integer), logger 650(String), 15(Integer), logger 651(String), 38(Integer), logger 652(String), 21(Integer), logger 653(String), 68(Integer), logger 654(String), 1(Integer), logger 655(String), 58(Integer), logger 656(String), 14(Integer), logger 657(String), 32(Integer), logger 658(String), 11(Integer), logger 659(String), 90(Integer), logger 660(String), 51(Integer), logger 661(String), 77(Integer), logger 662(String), 27(Integer), logger 663(String), 90(Integer), logger 664(String), 79(Integer), logger 665(String), 60(Integer), logger 666(String), 76(Integer), logger 667(String), 44(Integer), logger 668(String), 21(Integer), logger 669(String), 24(Integer), logger 670(String), 90(Integer), logger 671(String), 93(Integer), logger 672(String), 32(Integer), logger 673(String), 89(Integer), logger 674(String), 43(Integer), logger 675(String), 41(Integer), logger 676(String), 54(Integer), logger 677(String), 5(Integer), logger 678(String), 90(Integer), logger 679(String), 45(Integer), logger 680(String), 52(Integer), logger 681(String), 2(Integer), logger 682(String), 74(Integer), logger 683(String), 8(Integer), logger 684(String), 3(Integer), logger 685(String), 4(Integer), logger 686(String), 65(Integer), logger 687(String), 41(Integer), logger 688(String), 42(Integer), logger 689(String), 53(Integer), logger 690(String), 65(Integer), logger 691(String), 65(Integer), logger 692(String), 75(Integer), logger 693(String), 15(Integer), logger 694(String), 94(Integer), logger 695(String), 0(Integer), logger 696(String), 81(Integer), logger 697(String), 22(Integer), logger 698(String), 51(Integer), logger 699(String), 68(Integer), logger 700(String), 61(Integer), logger 701(String), 77(Integer), logger 702(String), 36(Integer), logger 703(String), 50(Integer), logger 704(String), 28(Integer), logger 705(String), 74(Integer), logger 706(String), 10(Integer), logger 707(String), 85(Integer), logger 708(String), 15(Integer), logger 709(String), 31(Integer), logger 710(String), 66(Integer), logger 711(String), 82(Integer), logger 712(String), 77(Integer), logger 713(String), 87(Integer), logger 714(String), 58(Integer), logger 715(String), 80(Integer), logger 716(String), 33(Integer), logger 717(String), 68(Integer), logger 718(String), 67(Integer), logger 719(String), 78(Integer), logger 720(String), 83(Integer), logger 721(String), 82(Integer), logger 722(String), 71(Integer), logger 723(String), 43(Integer), logger 724(String), 45(Integer), logger 725(String), 35(Integer), logger 726(String), 78(Integer), logger 727(String), 54(Integer), logger 728(String), 13(Integer), logger 729(String), 82(Integer), logger 730(String), 5(Integer), logger 731(String), 8(Integer), logger 732(String), 92(Integer), logger 733(String), 6(Integer), logger 734(String), 10(Integer), logger 735(String), 70(Integer), logger 736(String), 98(Integer), logger 737(String), 85(Integer), logger 738(String), 64(Integer), logger 739(String), 29(Integer), logger 740(String), 82(Integer), logger 741(String), 55(Integer), logger 742(String), 93(Integer), logger 743(String), 95(Integer), logger 744(String), 91(Integer), logger 745(String), 11(Integer), logger 746(String), 54(Integer), logger 747(String), 14(Integer), logger 748(String), 24(Integer), logger 749(String), 65(Integer), logger 750(String), 83(Integer), logger 751(String), 39(Integer), logger 752(String), 40(Integer), logger 753(String), 84(Integer), logger 754(String), 43(Integer), logger 755(String), 39(Integer), logger 756(String), 87(Integer), logger 757(String), 76(Integer), logger 758(String), 82(Integer), logger 759(String), 90(Integer), logger 760(String), 50(Integer), logger 761(String), 35(Integer), logger 762(String), 73(Integer), logger 763(String), 88(Integer), logger 764(String), 46(Integer), logger 765(String), 56(Integer), logger 766(String), 26(Integer), logger 767(String), 1(Integer), logger 768(String), 87(Integer), logger 769(String), 50(Integer), logger 770(String), 25(Integer), logger 771(String), 92(Integer), logger 772(String), 6(Integer), logger 773(String), 28(Integer), logger 774(String), 48(Integer), logger 775(String), 28(Integer), logger 776(String), 37(Integer), logger 777(String), 98(Integer), logger 778(String), 30(Integer), logger 779(String), 70(Integer), logger 780(String), 1(Integer), logger 781(String), 21(Integer), logger 782(String), 18(Integer), logger 783(String), 21(Integer), logger 784(String), 50(Integer), logger 785(String), 9(Integer), logger 786(String), 62(Integer), logger 787(String), 76(Integer), logger 788(String), 33(Integer), logger 789(String), 96(Integer), logger 790(String), 27(Integer), logger 791(String), 5(Integer), logger 792(String), 98(Integer), logger 793(String), 92(Integer), logger 794(String), 67(Integer), logger 795(String), 24(Integer), logger 796(String), 88(Integer), logger 797(String), 78(Integer), logger 798(String), 64(Integer), logger 799(String), 11(Integer), logger 800(String), 52(Integer), logger 801(String), 0(Integer), logger 802(String), 17(Integer), logger 803(String), 50(Integer), logger 804(String), 31(Integer), logger 805(String), 8(Integer), logger 806(String), 94(Integer), logger 807(String), 33(Integer), logger 808(String), 49(Integer), logger 809(String), 7(Integer), logger 810(String), 89(Integer), logger 811(String), 99(Integer), logger 812(String), 88(Integer), logger 813(String), 66(Integer), logger 814(String), 42(Integer), logger 815(String), 40(Integer), logger 816(String), 98(Integer), logger 817(String), 32(Integer), logger 818(String), 99(Integer), logger 819(String), 83(Integer), logger 820(String), 57(Integer), logger 821(String), 53(Integer), logger 822(String), 45(Integer), logger 823(String), 60(Integer), logger 824(String), 62(Integer), logger 825(String), 24(Integer), logger 826(String), 51(Integer), logger 827(String), 35(Integer), logger 828(String), 7(Integer), logger 829(String), 34(Integer), logger 830(String), 25(Integer), logger 831(String), 98(Integer), logger 832(String), 93(Integer), logger 833(String), 17(Integer), logger 834(String), 92(Integer), logger 835(String), 45(Integer), logger 836(String), 53(Integer), logger 837(String), 61(Integer), logger 838(String), 86(Integer), logger 839(String), 86(Integer), logger 840(String), 27(Integer), logger 841(String), 90(Integer), logger 842(String), 55(Integer), logger 843(String), 66(Integer), logger 844(String), 21(Integer), logger 845(String), 42(Integer), logger 846(String), 55(Integer), logger 847(String), 61(Integer), logger 848(String), 58(Integer), logger 849(String), 9(Integer), logger 850(String), 50(Integer), logger 851(String), 26(Integer), logger 852(String), 45(Integer), logger 853(String), 26(Integer), logger 854(String), 97(Integer), logger 855(String), 5(Integer), logger 856(String), 39(Integer), logger 857(String), 34(Integer), logger 858(String), 38(Integer), logger 859(String), 68(Integer), logger 860(String), 45(Integer), logger 861(String), 7(Integer), logger 862(String), 3(Integer), logger 863(String), 25(Integer), logger 864(String), 98(Integer), logger 865(String), 8(Integer), logger 866(String), 83(Integer), logger 867(String), 25(Integer), logger 868(String), 97(Integer), logger 869(String), 88(Integer), logger 870(String), 3(Integer), logger 871(String), 29(Integer), logger 872(String), 50(Integer), logger 873(String), 71(Integer), logger 874(String), 82(Integer), logger 875(String), 93(Integer), logger 876(String), 86(Integer), logger 877(String), 41(Integer), logger 878(String), 71(Integer), logger 879(String), 37(Integer), logger 880(String), 55(Integer), logger 881(String), 72(Integer), logger 882(String), 6(Integer), logger 883(String), 53(Integer), logger 884(String), 86(Integer), logger 885(String), 53(Integer), logger 886(String), 19(Integer), logger 887(String), 41(Integer), logger 888(String), 47(Integer), logger 889(String), 45(Integer), logger 890(String), 8(Integer), logger 891(String), 61(Integer), logger 892(String), 42(Integer), logger 893(String), 57(Integer), logger 894(String), 87(Integer), logger 895(String), 83(Integer), logger 896(String), 25(Integer), logger 897(String), 2(Integer), logger 898(String), 85(Integer), logger 899(String), 9(Integer), logger 900(String), 23(Integer), logger 901(String), 80(Integer), logger 902(String), 3(Integer), logger 903(String), 36(Integer), logger 904(String), 6(Integer), logger 905(String), 53(Integer), logger 906(String), 90(Integer), logger 907(String), 29(Integer), logger 908(String), 73(Integer), logger 909(String), 58(Integer), logger 910(String), 35(Integer), logger 911(String), 90(Integer), logger 912(String), 56(Integer), logger 913(String), 32(Integer), logger 914(String), 40(Integer), logger 915(String), 73(Integer), logger 916(String), 92(Integer), logger 917(String), 97(Integer), logger 918(String), 85(Integer), logger 919(String), 89(Integer), logger 920(String), 61(Integer), logger 921(String), 19(Integer), logger 922(String), 59(Integer), logger 923(String), 21(Integer), logger 924(String), 13(Integer), logger 925(String), 87(Integer), logger 926(String), 86(Integer), logger 927(String), 73(Integer), logger 928(String), 4(Integer), logger 929(String), 80(Integer), logger 930(String), 54(Integer), logger 931(String), 73(Integer), logger 932(String), 52(Integer), logger 933(String), 92(Integer), logger 934(String), 3(Integer), logger 935(String), 6(Integer), logger 936(String), 51(Integer), logger 937(String), 46(Integer), logger 938(String), 23(Integer), logger 939(String), 42(Integer), logger 940(String), 67(Integer), logger 941(String), 76(Integer), logger 942(String), 58(Integer), logger 943(String), 3(Integer), logger 944(String), 81(Integer), logger 945(String), 22(Integer), logger 946(String), 26(Integer), logger 947(String), 59(Integer), logger 948(String), 37(Integer), logger 949(String), 32(Integer), logger 950(String), 10(Integer), logger 951(String), 3(Integer), logger 952(String), 88(Integer), logger 953(String), 5(Integer), logger 954(String), 77(Integer), logger 955(String), 36(Integer), logger 956(String), 43(Integer), logger 957(String), 40(Integer), logger 958(String), 78(Integer), logger 959(String), 17(Integer), logger 960(String), 57(Integer), logger 961(String), 18(Integer), logger 962(String), 40(Integer), logger 963(String), 64(Integer), logger 964(String), 28(Integer), logger 965(String), 50(Integer), logger 966(String), 91(Integer), logger 967(String), 76(Integer), logger 968(String), 94(Integer), logger 969(String), 24(Integer), logger 970(String), 34(Integer), logger 971(String), 44(Integer), logger 972(String), 62(Integer), logger 973(String), 78(Integer), logger 974(String), 79(Integer), logger 975(String), 47(Integer), logger 976(String), 47(Integer), logger 977(String), 58(Integer), logger 978(String), 77(Integer), logger 979(String), 68(Integer), logger 980(String), 27(Integer), logger 981(String), 64(Integer), logger 982(String), 59(Integer), logger 983(String), 91(Integer), logger 984(String), 63(Integer), logger 985(String), 99(Integer), logger 986(String), 35(Integer), logger 987(String), 1(Integer), logger 988(String), 13(Integer), logger 989(String), 20(Integer), logger 990(String), 87(Integer), logger 991(String), 94(Integer), logger 992(String), 59(Integer), logger 993(String), 66(Integer), logger 994(String), 38(Integer), logger 995(String), 40(Integer), logger 996(String), 92(Integer), logger 997(String), 72(Integer), logger 998(String), 51(Integer), logger 999(String), 67(Integer), logger 1000(String), 0(Integer)

直接预编译了一条含有1000组占位符数据的插入SQL。原来执行的的SQL不同才是主要的原因。

六、使用JDBC分批次批量插入

最后不使用MP和mybaties执行执行插入50万条数据的代码示例如下:

    /**
     * JDBC分批次批量插入
     * @throws IOException
     */
    @Test
    public void testJDBCBatchInsertUser() throws IOException {
        Connection connection = null;
        PreparedStatement preparedStatement = null;

        String databaseURL = "jdbc:mysql://localhost:3306/record";
        String user = "root";
        String password = "123456";

        try {
            connection = DriverManager.getConnection(databaseURL, user, password);
            // 关闭自动提交事务,改为手动提交
            connection.setAutoCommit(false);
            System.out.println("===== 开始插入数据 =====");
            long startTime = System.currentTimeMillis();
            String sqlInsert = "INSERT INTO t_user ( user_name, user_age) VALUES ( ?, ?)";
            preparedStatement = connection.prepareStatement(sqlInsert);

            Random random = new Random();
            for (int i = 1; i <= 500000; i++) {
                preparedStatement.setString(1, "logger " + i);
                preparedStatement.setInt(2, random.nextInt(100));
                // 添加到批处理中
                preparedStatement.addBatch();

                if (i % 1000 == 0) {
                    // 每1000条数据提交一次
                    preparedStatement.executeBatch();
                    connection.commit();
                    System.out.println("成功插入第 "+ i+" 条数据");
                }

            }
            // 处理剩余的数据
            preparedStatement.executeBatch();
            connection.commit();
            long spendTime = System.currentTimeMillis()-startTime;
            System.out.println("成功插入 50 万条数据,耗时:"+spendTime+"毫秒");
        } catch (SQLException e) {
            System.out.println("Error: " + e.getMessage());
        } finally {
            if (preparedStatement != null) {
                try {
                    preparedStatement.close();
                } catch (SQLException e) {
                    e.printStackTrace();
                }
            }

            if (connection != null) {
                try {
                    connection.close();
                } catch (SQLException e) {
                    e.printStackTrace();
                }
            }
        }
    }

使用setAutoCommit(false) 来禁止自动提交事务,然后在每次批量插入之后手动提交事务。每次插入数据时都新建一个 PreparedStatement 对象以避免状态不一致问题。

我们可以看到最后也只用了80秒就完成了数据的插入,还是很不错的。

 七、总结

1.不要偷懒,自带的不一定很适合现有的场景。

2.配置连接池:连接池提供了诸多优势,包括性能提升、资源管理、连接可靠性和平滑扩展等,使得应用程序能够更高效地与数据库进行交互。

3.索引:在大量数据插入前暂时去掉索引,最后再打上,这样可以大大减少写入时候的更新索引的时间。

4.更好的硬件,硬件提升之后,速度肯定会更快。

  • 4
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值