论坛首页 Java企业应用论坛

mybatis性能比ibatis慢一倍

浏览 74005 次
该帖已经被评为精华帖
作者 正文
   发表时间:2012-04-17   最后修改:2012-04-17
                 
0 请登录后投票
   发表时间:2012-04-17  
杨姐出现了...
0 请登录后投票
   发表时间:2012-04-17  
dengmingfeng 写道
在我看来ibatis本来就是一个失败的架构。开发效力不及hibernate,
要写一大堆的代码,在我看了它一看的时候就果断放弃了。
过了这么多年,还没有流行起来。


开发效率如何衡量的呢
0 请登录后投票
   发表时间:2012-04-17  
Issue 580 Status:  Accepted

值得庆祝下,现期待下一个release吧。
0 请登录后投票
   发表时间:2012-04-18  
说的Mybatis的速度又让我想起了两年前我发的一个贴
http://www.iteye.com/problems/52051
0 请登录后投票
   发表时间:2012-04-18  
直接加硬件成本。。IBM的策略,哈哈哈
0 请登录后投票
   发表时间:2012-04-18  
值得关注的问题
0 请登录后投票
   发表时间:2012-04-18  
hibernate从设计上讲是优越的,但条条框框也多。

ibatis的思路到是大道从简了,便于对性能优化的定制设计。

个人从业经验,在传统企业应用中使用hibernate
在互联网应用中使用ibatis/mybatis.

这个世界上很少有万精油方案啊,两者都是好东西!!

楼主的帖子还是很有价值的。
0 请登录后投票
   发表时间:2012-04-18   最后修改:2012-04-18
楼主测试环境是什么配置和数据库版本?

我用mysql5.1.57  (酷睿2 Dell台式机 500G西数硬盘  3G内存 XP)

对一个表22个字段 (ID自增长,总计23个字段,4个varchar 2个char。无text blog字段,其他都是int或tinyint) 有三个索引 email, username, userGroupId

JDBC连接batch插入,跟你的一样batch size=1000, batch insert 1000次,总共100万条数据


代码大致如下

String sql = "INSERT INTO pg_user(username,email,password,regIp,regDate,salt,emailCheck,avatarStatus,adminGroupId," +
				"userGroupId,teacherLevel,sourceType,activeTime,canAdmin,credits,delFlag,essayCount," +
				"oralCount,psCount,lastLoginIp,lastLoginTime,loginTimes) VALUES(?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)";


long ttt = 0;
long t1 = System.currentTimeMillis();
for(int j=0; j<n; ++j) {
	stmt = conn.prepareStatement(conn, sql);
	conn.setAutoCommit(false);				
	for(i = 0; i < paramss.length; i++) {
		long t11 = System.currentTimeMillis();
		fillStatement(stmt, paramss[i]);
		ttt += (System.currentTimeMillis()-t11);
		stmt.addBatch();
	}			
	stmt.executeBatch();
	conn.commit();
}
long t2 = System.currentTimeMillis();
System.out.println("插入" + (beanList.size() * n) + "条记录用时" + (t2-t1) + "ms, fillStatement用时" + ttt + "ms");


paramss是一个object[][] 都是准备好的测试数据
fillStatement 是用反射设置PrepareStatement参数的方法(因为担心这个方法会用时过多,进行了统计,但实际占用时间并不多)


结果
myisam表类型: 插入1000000条记录用时258482ms, fillStatement用时20817ms
innodb表类型: 插入1000000条记录用时324539ms, fillStatement用时20928ms


测了几次都差不多。100万条在myisam需要260秒左右 innodb需要320秒左右


感觉我直接用jdbc插入的性能都比楼主的数据低这么多,是代码还是数据库或机器配置问题?

0 请登录后投票
   发表时间:2012-04-18  
请楼主能够提供测试代码。
0 请登录后投票
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics