本文只从实验层面对使用hibernate前后数据操作做了测试,并记录测试数据,以直观的形式对效率做了对比。
下面对试验环境进行简要的说明:
硬件: CPU,E6500,2.33GHZ; 内存,DDR2,2G;
操作系统: WinXP HOME版;
数据库软件:MySQL5.1.46; java下MySQL驱动,mysql-connector-java-5.1.12
实验代码环境:MyEclipse6.5;hibernate3.2;
实验方案:
1.使用hibernate分别插入(读取,更新,删除)1条,10条,100条,1000条数据,记录所用的时间;
2.直接使用mysql-connector插入(读取,更新,删除)1条,10条,100条,1000条数据,记录所用时间;
测试使用的表的定义:

测试数据:
插入:id字段递增,其它三个字段保持不变;
读取:根据id字段提取数据;
更新:将name字段更换为其它的数据;
删除操作在插入数据的基础上进行
测试结果:
1.插入数据测试:
| 读取数据量 | hibernate(ms) | connector(ms)批量 | connector(ms) |
| 1条 | 94 | 47 | 15-47 |
| 10条 | 94 | 47-63 | 219-266 |
| 100条 | 141-156 | 31-62 | 2281-2313 |
| 1000条 | 469-531 | 172-203 | 20313-23266 |
注释:由于测试前数据已全部生成,因此用mysql测试时,使用了两种不同的方式:一种是批量的形式,即PreparedStatement 的executeBatch方法;一种是逐一插入,即Statement的execute方法;
2.读取数据测试:
| 读取数据量 | hibernate(ms) | connector(ms)批量 | connector(ms) |
| 1条 | 63 | 0 | 0 |
| 10条 | 78 | 0 | 0-16 |
| 100条 | 156-172 | 0 | 15-32 |
| 1000条 | 688-781 | 16 | 156-172 |
注释:这里测试选择的数据是连续的,即从Id的一个连续范围内(比如0-100)全部选取。因此这里的批量实际用一条sql语句完成。第三组测试数据是将选择范围的数据一一提取得到的,即提取一个数据就执行一个sql语句。
3.更新数据测试:
| 更新数据量 | hibernate(ms) | connector(ms)批量 | connector(ms) |
| 1条 | 93-125 | 15-47 | 31-63 |
| 10条 | 93-125 | 31-47 | 188-235 |
| 100条 | 140-157 | 47 | 1937-2031 |
| 1000条 | 485-516 | 47-78 | 23172- 23469 |
注释:同读取数据测试说明一致。
4.删除数据测试:
| 删除数据量 | hibernate(ms) | connector(ms)批量 | connector(ms) |
| 1条 | 93-109 | 31-47 | 31-47 |
| 10条 | 109-156 | 16 | 172-203 |
| 100条 | 218-235 | 31-47 | 1828-2078 |
| 1000条 | 1000-1047 | 47 | 17750-19453 |
注释:同读取数据测试说明一致
总结:
如果应用程序中批量操作占的比例很大,直接使用connector效率更高,毕竟可以一次性交给数据库处理;否则的话,还是使用hibernate效率更高。同时也可以看到,无论何种情况,直接使用connector对数据逐一提交效率都是最低的。从实验数据的对比来看,hibernate更像一个折衷的方案。
本文通过实验对比了使用Hibernate与直接使用mysql-connector在数据插入、读取、更新和删除操作上的效率。测试环境包括CPU E6500、2G DDR2内存、WinXP、MySQL5.1.46、MyEclipse6.5和Hibernate3.2。结果显示,批量操作时直接使用数据库连接器效率更高,而单一操作 Hibernate 效率更优。结论指出,Hibernate适合非大批量操作,而数据库连接器更适合批量任务。
1139

被折叠的 条评论
为什么被折叠?



