关于Mybatis的Batch模式性能测试及结论
来源:互联网 发布:求补码的方法编程 编辑:程序博客网 时间:2024/05/16 07:56
近日在公司项目中,使用到spring+mybatis的架构,特对mybatis的batch模式做了相关研究,得出以下结论:
1.Mybatis内置的ExecutorType有3种,默认的是simple,该模式下它为每个语句的执行创建一个新的预处理语句,单条提交sql;而batch模式重复使用已经预处理的语句,
1.Mybatis内置的ExecutorType有3种,默认的是simple,该模式下它为每个语句的执行创建一个新的预处理语句,单条提交sql;而batch模式重复使用已经预处理的语句,
并且批量执行所有更新语句,显然batch性能将更优;
2.但batch模式也有自己的问题,比如在Insert操作时,在事务没有提交之前,是没有办法获取到自增的id,这在某型情形下是不符合业务要求的;
3. 在测试中使用simple模式提交10000条数据,时间为18248 毫秒,batch模式为5023 ,性能提高70%;
4.通过走码和研读spring相关文件发现,在同一事务中batch模式和simple模式之间无法转换,由于本项目一开始选择了simple模式,所以碰到需要批量更新时,只能在单独的事务中进行;
5.在代码中使用batch模式可以使用以下方式:
//从spring注入原有的sqlSessionTemplate
@Autowired
private SqlSessionTemplate sqlSessionTemplate;
public void testInsertBatchByTrue() {
//新获取一个模式为BATCH,自动提交为false的session
//如果自动提交设置为true,将无法控制提交的条数,改为最后统一提交,可能导致内存溢出
SqlSession session = sqlSessionTemplate.getSqlSessionFactory().openSession(
ExecutorType.BATCH, false);
//通过新的session获取mapper
fooMapper = session.getMapper(FooMapper.class);
int size = 10000;
try {
for (int i = 0; i < size; i++) {
Foo foo = new Foo();
foo.setName(String.valueOf(System.currentTimeMillis()));
fooMapper.insert(foo);
if (i % 1000 == 0 || i == size - 1) {
//手动每1000个一提交,提交后无法回滚
session.commit();
//清理缓存,防止溢出
session.clearCache();
}
}
} catch (Exception e) {
//没有提交的数据可以回滚
session.rollback();
} finally {
session.close();
}
}
6.上述代码没有使用spring的事务,改动手动控制,如果和原spring事务一起使用,将无法回滚,必须注意,最好单独使用;
转载自:http://www.blogjava.net/diggbag/articles/mybatis.html
阅读全文
0 0
- 关于mybatis的batch模式性能测试及结论
- 关于mybatis的batch模式性能测试及结论
- 关于mybatis的batch模式性能测试及结论
- 关于Mybatis的Batch模式性能测试及结论
- 关于Mybatis的Batch模式性能测试及结论
- webservice soap简单的性能测试结论
- [转贴]关于有盘无盘的结论,我自己亲自测试的
- 关于bind函数和connect函数的测试结论
- 关于点击测试(hitTest)的几点结论
- 关于iOS自动化测试及性能测试的
- zhucheng关于2006上海I题的结论及证明
- WebService工作原理 与 性能测试结论
- 单例模式的设计与实现,及性能测试
- 关于食品科技的研究结论
- 关于组织的几个结论
- 【ENVI二次开发】关于批处理(Batch)模式与ENVI_DOIT的使用
- 【ENVI二次开发】关于批处理(Batch)模式与ENVI_DOIT的使用
- 关于输入流对象cin的get函数——测试结论总结
- Django中的一些常用内置函数
- JavaScript的封装
- [VS2010]_[Windows]_[Debug模式下LoadLibrary错误87]
- flume高级配置——数据流的复制、分流、负载均衡、故障转移
- 百练2815---城堡问题 数据结构初学小鲜肉 思路代码分享
- 关于Mybatis的Batch模式性能测试及结论
- A
- OpenGL程序常见函数功能介绍
- jQuery on()方法绑定动态元素的点击事件无响应的解决办法
- 跨服务存储传递HttpContext Cookies
- DD-WRT中的各种无线模式
- MyEclipse-Tomcat-MAVEN-SVN项目完整环境学习搭建
- Opencv读取.dat格式CT数据
- 电商项目的大致架构