如何快速安全的插入千万条数据?( 三 )


5.批次插入数据通过insert(...)values(...),(...)的方式批次插入数据 , 部分代码如下:
// 保存订单和解析位置保证在一个事务中SqlSession session = sqlSessionFactory.openSession();try {    long startTime = System.currentTimeMillis();    FielAnalysisMApper fielAnalysisMapper = session.getMapper(FielAnalysisMapper.class);    FileOrderMapper fileOrderMapper = session.getMapper(FileOrderMapper.class);    fileOrderMapper.batchInsert(orderList);    // 更新上次解析到的位置 , 同时指定更新时间    fileAnalysis.setPosition(endPosition + 1);    fileAnalysis.setStatus("3");    fileAnalysis.setUpdTime(new Date());    fielAnalysisMapper.updateFileAnalysis(fileAnalysis);    session.commit();    long endTime = System.currentTimeMillis();    System.out.println("===插入数据花费:" + (endTime - startTime) + "ms===");} catch (Exception e) {    session.rollback();} finally {    session.close();}...省略 , 更多可以查看Github完整代码...如上代码在一个事务中同时保存批次订单数据和文件解析位置信息 , batchInsert通过使用mybatis的<foreach>标签来遍历订单列表 , 生成values数据;
总结以上展示了部分代码 , 完整的代码可以查看Github地址中的batchInsert模块 , 本地设置每次截取的文件大小为2M , 经测试1000w条数据(大小1.5G左右)插入mysql数据库中 , 大概花费时间在20分钟左右 , 当然可以通过设置截取的文件大小 , 花费的时间也会相应的改变 。
完整代码https://github.com/ksfzhaohui/blog/tree/master/mybatis

【如何快速安全的插入千万条数据?】


推荐阅读