在处理数据的时候,突然想到大批量的数据怎么快速的导入myql呢?网上也找了一下资料,觉得以下两个链接写得挺好的,我也是仿照链接来做的。大家有空可以做一下测试。链接1,链接2。
由于我自己不太擅长线程,所以我就弄了一个最笨的办法:循环。
在做测试的时候,我发现插入十万条两列纯数据到mysql是正常的时间也很快,但是到15万条的时候就报错了。后来查了一下原因,估计是超过了List的最大值了。后来我想了一下,那循环30次插入10万条不就好了?测试之后发现是可以的,因为是只有两列,所以时间大概是61秒。因为是内网写的,所以只能发核心的代码,核心代码如下:
public AvailableResult autoInsertInfo(AutoInsertInfoReqVo reqVo) {
try {
logger.info(">>>>>>>>>开始>>自动添加数据>>>>>>>>>");
//创建一个学生List对象,存放自动生成的数据
//List<Studentsinfo> stList = new ArrayList<Studentsinfo>();
//创建时间比较,看大概花费多长时间
long start = System.currentTimeMillis();
for(int j = 1;j<=30;j++) {
//创建一个学生List对象,存放自动生成的数据
List<Studentsinfo> stList = new ArrayList<Studentsinfo>();
logger.info(">>>>>>>>>>这是第"+j+"次插入数据");
for(int i = 1;i<=100000;i++) {
//创建一个新的学生对象
Studentsinfo studentsinfo = new Studentsinfo();
//设置对应的值
studentsinfo.setName("test"+i);
studentsinfo.setPassword("123456+"+i);
//把学生对象添加到List列表内
stList.add(studentsinfo);
}
//调用mapper插入list对象,这里是调用自带的插入数据库方法
studentsinfoMapper.insertList(stList);
}
long end = System.currentTimeMillis();
logger.info(">>>>>>>>>>结束>>添加学生信息>>>>>>>>>>");
logger.info(">>>>>>>>>>共耗时"+((end-start)/1000)+"秒");
return AvailableResult.ok("添加学生信息成功");
} catch (Exception e) {
e.printStackTrace();
logger.error(">>>>>>>>>>添加学生信息异常,原因为:" + e.getMessage());
return AvailableResult.errorException(e.getMessage());
}
}
到时候在本地测试没问题之后,再把代码上传吧。核心思想就是将数据分批导入。肯定还有更好的办法,也希望你们可以留言告诉我,谢谢。