(转http://blog.csdn.net/jxspace/article/details/1234002)
(关于hibernate性能的测试)
测试结果分析:
1. 在同等测试环境和条件下,hibernate优于jdbc这种说法是错误的,从测试结果来看, jdbc要优于hibernate,这从理论上是可以理解的,hibernate的基础就是jdbc,它不可能优于jdbc。
2. 影响数据库操作性能的因素很多,主要包括:
1)数据库自身
如mysql表类型,是ISAM还是innodb
2)数据库驱动
从测试数据和结果看,mysql的3.0.11版本的驱动显然更适合于mysql4.1.9版本的数据库,而高版本的3.1.11用于hibernate的插入操作则会丧失近3.5倍的执行效率,另外,经过笔者测试,在3.1.11版本的驱动中,使用与不使用批次(batch)插入操作居然没有任何区别,这也能解释一些技术论坛上提到的hibernate批处理操作有时候会实效这个令人困惑的问题。
3)操作数据库的程序本身
测试环境3表明,当mysql的表类型为innodb时,即使是采用JDBC直接写的方式,不采用事务方式插入记录,写入速率几乎是“蜗速”(~50条/秒),这可以说是“杀手级”的因素了。
结论:
<!--[if !supportLists]-->1. 笔者估计在大数据量写入状况下,Hibernate的性能损失在30%-35%左右<!--[endif]-->
<!--[if !supportLists]-->2. 对于要获取高性能数据读写的系统,不推荐使用Hibernate的ORM方式进行数据读写。<!--[endif]-->
<!--[if !supportLists]-->3. 性能的优劣除了所采用的技术决定外,更取决于使用技术的人,比如在测试环境三中,不采用事务方式写数据,其速度简直不能以“暴差”来形容,想想这样一种情况,让你去开一辆法拉利F1赛车,你一定能想象得到你驾驶的速度。:)<!--[endif]-->
后记:
在进行测试的时候,起初笔者使用的JDBC驱动是J/Conncector 3.1.11版本,发现Hibernate的批量写设置根本不起作用,是否使用批量写根本就没有差别,在一些网站上面也发现有类似的疑问,经过更换为3.0.x版本驱动后,批量写才生效,而且无论是Hibernate方式还是JDBC方式下,写记录的性能明显提升,表明3.0.X的驱动更适合于MySql4.1,为什么高版本的3.1.11反而在低版本数据库上面表现出低效?笔者在安装Roller这个Apache孵化器blog项目的时候,也对安装指导中推荐使用3.0.X版本来匹配MySql4.1数据库这个问题比较疑惑,可惜Roller的InstallGuid没有做具体解释,感兴趣的网友可以到Roller网站的wiki上去弄清楚这个问题,并把答案做个回复,非常感谢。这个插曲还说明了一个道理——“升级并非总是好事”。
25楼评论极为精彩:
其实第三个测试的结论,源于楼主对MySql的INNODB,乃至对所有事务型数据库系统执行语句的原理的误解。
对于MySql INNODB、Sql Server等数据库而言,每单独执行一个SQL语句,都是一个事务。为什么每秒只剩下50条记录了?因为,在INNODB存储下,每执行一次INSERT操作,都要经历BEGIN Transaction、INSERT、COMMIT Transaction操作,也就是,第三种测试案例,实际上是提交了1000个事务。这个不用hibernate,而直接在mysql、sql server等数据库中,用
begin trans
insert 1000 times
commit
以及
insert 1000 times
执行,观察其消耗时间就知道了。注意后者的insert语句外部没有带事务。
这是数据库本身机制决定的,和hibernate还是用JDBC没有关系。同时也解释了为什么myisam下,单独执行1000个insert语句,不用事务也很快的原因,因为它根本不用事务。
分享到:
相关推荐
本话题将深入探讨“Hibernate性能测试代码”,以帮助我们理解如何有效地评估和优化Hibernate在实际应用中的表现。 首先,性能测试是软件开发过程中的关键环节,它旨在确定系统的响应时间、吞吐量和资源利用率等指标...
### Hibernate性能优化研究 #### 一、引言 随着企业级应用的发展,高效的数据持久化技术成为了提升系统性能的关键因素之一。Hibernate作为一种流行的面向Java环境的对象关系映射(Object-Relational Mapping,简称...
珍藏的hibernate性能优化,如果对hibernate进行优化,很详细,是工作和面试的好助手
### 优化Hibernate性能的几点建议 #### 一、调整Fetch Size以提高性能 在使用Hibernate进行数据查询时,Fetch Size的设置对性能有着显著的影响。Fetch Size是指每次从数据库中取出的数据行数,默认情况下,Oracle...
其中,Hibernate作为一款流行的Java ORM(Object Relational Mapping)框架,在提高开发效率的同时,也引发了对其性能表现的关注。本文将探讨Hibernate在不同场景下的性能特点、应用规模及潜在的风险,并尝试分析...
【提高Hibernate性能】 在开发大型企业级应用时,ORM框架如Hibernate在处理大量数据时可能会出现性能瓶颈。针对这种情况,优化Hibernate的配置和使用策略至关重要。以下是一些提高Hibernate性能的关键点: 1. **...
本文将深入探讨Hibernate性能优化中的一个重要概念——一级缓存,并结合给出的压缩包文件“hibernate_cache_level1”,来详细解析一级缓存的工作原理及其优化策略。 一级缓存是Hibernate内置的一种缓存机制,它存在...
《Hibernate性能调优》 在Java企业级应用开发中,Hibernate作为一款强大的对象关系映射(ORM)框架,被广泛用于数据库操作。然而,如果不合理地使用或配置,Hibernate可能会导致性能瓶颈。本文将深入探讨如何对...
Hibernate 性能优化 在 Hibernate 中,性能优化是非常重要的,因为它直接影响着应用程序的效率和可扩展性。在本文中,我们将讨论两个常见的性能优化问题:批量处理和 1+n 问题,并提供相应的解决方法。 问题 1:...
《Hibernate性能优化共9页.pdf》的压缩包文件聚焦于Java开发中的一个重要框架——Hibernate的性能调优。Hibernate作为一款强大的对象关系映射(ORM)框架,极大地简化了数据库操作,但同时也可能带来性能问题。以下...
的效率低于直接JDBC存取,然而,在经过比较好的性能优化之后,Hibernate的性能还是让人相当满意的, 特别是应用二级缓存之后,甚至可以获得比较不使用缓存的JDBC更好的性能,下面介绍一些通常的 Hibernate的优化策略...
### Hibernate 性能优化 #### 一、引言 Hibernate 是一款非常强大的对象关系映射(ORM)框架,它能够简化 Java 应用程序与数据库之间的交互过程。然而,对于初次接触 Hibernate 的开发者来说,可能会遇到性能方面...
在IT领域,尤其是在Java开发中,Hibernate作为一款流行的开源对象关系映射(ORM)框架,其缓存机制是实现高性能数据库交互的关键技术之一。本文将深入探讨Hibernate缓存的原理、类型及其对性能优化的影响。 ### ...
然而,Hibernate的性能和效率问题一直是一个需要特别关注的领域。Hibernate自动生成的SQL语句可能在某些情况下并不是最优化的,因此监控和优化这些SQL语句对于提高整体应用性能是必要的。 在提到提升Hibernate性能...
【Hibernate性能优化】:在Java开发中,Hibernate作为流行的ORM框架,其性能优化至关重要。缓存、延迟加载、事务管理和锁定策略是提升Hibernate性能的四大关键要素。 **1. Hibernate缓存** 缓存机制是提高ORM框架...