Hibernate性能优化.ppt

上传人:牧羊曲112 文档编号:6507039 上传时间:2023-11-07 格式:PPT 页数:29 大小:270.49KB
返回 下载 相关 举报
Hibernate性能优化.ppt_第1页
第1页 / 共29页
Hibernate性能优化.ppt_第2页
第2页 / 共29页
Hibernate性能优化.ppt_第3页
第3页 / 共29页
Hibernate性能优化.ppt_第4页
第4页 / 共29页
Hibernate性能优化.ppt_第5页
第5页 / 共29页
点击查看更多>>
资源描述

《Hibernate性能优化.ppt》由会员分享,可在线阅读,更多相关《Hibernate性能优化.ppt(29页珍藏版)》请在三一办公上搜索。

1、第10章 Hibernate性能优化,10.1 事务处理10.2 并发控制10.3 缓存机制,10.1 事务处理,事务的概念JDBC事务处理JTA事务处理,返回,10.1.1 事务处理事务的概念,事务(Transaction)是访问数据库时,可能更新数据库中各种数据项的一个程序执行单元,用来确保数据的完整性,避免数据库中的数据在不正确的操作下引起的错误更改。事务的4个特性:原子性。指事务执行单元是一个不可分割的单元,这些单元要么都执行,要么都不执行。一致性。指无论执行了什么操作,都应保证数据的完整性和业务逻辑的一致性。隔离性。在事务执行过程中,多个执行单元间操作的数据都是其他单元没有操作或者操

2、作结束后的数据,保证每一个执行单元操作的数据都有完整的数据空间。持久性。事务结束后,执行单元操纵的数据被保存在数据库中,这些数据的保存状态是永久性的,不会因为系统故障而消失。,返回,10.1.2 事务处理JDBC事务处理(1),Hibernate框架中支持两种事务处理方式:JDBC 事务处理和JTA(Java Transaction API)事务处理,这两种事务处理方式默认情况下都是关闭的,可以通过配置开启事务管理。如果不进行配置那么会默认使用JDBC事务。JDBC事务应用:1.声明JDBC事务管理,配置方式:hibernate.cfg.xml中的配置方式,10.1.2 事务处理JDBC事务处

3、理(2),hibernate.properties的配置方式 2.编程过程中应用JDBC事务管理流程:实例化Configure类读取配置文件或者属性文件。获得SessionFactory实例。获得Session实例。通过session.beginTransaction()获得事务Transaction对象。开始事务:进行数据操作。提交事务:数据处理结束后提交事务。回滚事务:如果数据处理出现异常那么回滚事务,恢复原始数据。结束事务:通过session.close结束事务。,10.1.2 事务处理JDBC事务处理(3),3.应用JDBC事务管理实例:Configuration config=new

4、 Configuration();/实例化Configure类/省略业务代码sessionFactory=config.buildSessionFactory();/建立Session工厂Session session=sessionFactory.openSession();/开启会话Transaction tx=null;/定义事务处理对象trytx=session.beginTransaction();/开始事务tx.begin();/省略数据处理代码mit();/提交事务 catch(Exception e)e.printStackTrace();tx.rollback();/回滚事务

5、 finally session.close();/关闭Session,返回,10.1.3 事务处理JTA事务处理(1),JTA(Java Transaction API)是J2EE事务服务的标准解决方式,通过容器来控制事务。主要应用在多数据库操作的分布式系统中。JTA事务应用:1.声明JTA事务管理,配置方式:hibernate.cfg.xml中的配置方式net.sf.hibernate.transcation.JTATranscationFactory hibernate.properties的配置方式,10.1.3 事务处理JTA事务处理(2),2.编程过程中应用JTA事务管理流程:创建

6、JTA事务对象。开始事务。获得Session并编写操作数据的方法。关闭Session。提交事务。如果遇到异常事件则回滚事务。3.应用JDBC事务管理实例:try UserTransaction tx=null;/创建JTA事务tx=(UserTransaction)new InitialContext().);tx.begin();/开始事务,10.1.3 事务处理JTA事务处理(3),Session session1=sessionFactory.openSession();/创建第一个Session/省略数据处理代码session1.flush();session1.close();Ses

7、sion session2=sessionFactory.openSession();/创建第二个Session/省略数据处理代码session2.flush();session2.close();mit();/提交事务 catch(Exception e)tx.rollback();/回滚事务JTA事务处理首先创建事务处理对象,然后实例化Session,它的事务生命周期要长于Session的生命周期。JTA事务处理与JDBC事务处理不可同时使用。,返回,10.2 并发控制,在Hibernate应用中,并发主要是指是同一个时间段内多个事务共同请求同一个资源。对于并发如果不进行相应的控制,将产生

8、一系列问题。并发问题解决方案,返回,10.2.1 并发控制并发问题(1),第一类丢失更新。当两个或多个事务同时更新同一资源时,第一个事务已经更新了数据,而第二个事务由于被中断而撤销了事务,导致第一个事务也被撤销,那么数据将恢复到初始状态。脏读。当两个或者多个事务同时操作一个资源时,第一个事务更新了数据但未提交,此时第二个事务读取了该条数据并进行了处理。此时第一个事务由于某种原因被撤销了,那么第二个事务处理的数据就称为脏数据。虚读。虚读是由于当前的一个事务查询到了另一个事务新插入的数据而引起的。当第一个事务查询了数据库的记录数时,第二个事务向数据库中增加了一条记录,改变了当前的记录数目,那么第一

9、个事务获得的数据就是虚读的数据,该数据与数据库中的实际数据不相同。,10.2.1 并发控制并发问题(2),不可重复读。当第一个事务修改数据时,第二个事务在它的提交事务的前后,两次读取了第一个事务所修改的数据,导致第二个事务两次读取的数据不匹配。第二类丢失更新。第二类丢失更新是不可重复读的一个特例。当多个事务同时读取到了一条资源记录,分别根据自身的逻辑进行处理,最后分别提交事务。问题发生在最后提交的事务将会覆盖前面所有已经提交的事务的数据,导致最终的数据完整性被破坏。,返回,10.2.2 并发控制解决方案(1),为了解决在事务并发过程中出现的问题,Hibernate提供了一种特殊的处理方式锁。锁

10、有两种形式:悲观锁和乐观锁。悲观锁。认为所有的事务都在请求当前事务正在处理的资源,因此将正在处理数据资源上锁,其他所有事务都不可以访问上锁的资源。只有当前的事务提交后,其他事务才可以访问刚刚被锁定的数据。Query类和Criteria类的setLockMode()方法及Session类的load()和lock()方法都可以进行加锁。锁定模式如下,10.2.2 并发控制解决方案(2),10.2.2 并发控制解决方案(3),乐观锁。认为访问数据库的事务很少发生数据访问错误等问题。当数据出现了不一致状态时,Hibernate采用版本检查和时间戳等技术来实现读取数据。1)版本控制。版本控制技术是在操作

11、的数据表中增加一个版本号字段,习惯上将该版本号命名为version。当一个新事务到来时,首先加载版本号,如果版本号和数据库中的版本号相等,那么允许事务进行数据操作,否则给出警告信息,数据操作人员可以选择继续还是放弃当前的操作。版本控制使用方法:a)在数据表中增加版本控制字段,例如增加int类型的version字段。b)在该表对应的持久化类中增加int类型的属性version,并编写getter和setter方法。c)在映射文件中配置该字段和属性的映射,配置的版本字段和属性值间的映射必须填写在字段下面,配置方式如下,10.2.2 并发控制解决方案(4),注意:使用版本控制技术是通过程序来实现的锁

12、定机制,如果一个事务更改了版本信息,那么另一个事务必须先获得新版本号以后才可以进行数据操作。2)时间戳。使用时间戳就是在数据表中增加一个时间类型的版本号,操作数据的事务必须匹配当前的时间才可以进行数据操作。时间戳的使用方法:a)在数据表中建立时间类型(timestamp)字段,例如lastedtime b)在该表对应的持久化类中增加Date类型的属性lastedtime,并编写getter和setter方法。c)在映射文件中进行配置,配置时间戳的标签要写在标签下面,配置方式如下,10.2.2 并发控制解决方案(5),锁的使用原则:对于数据访问频率较低并且一旦产生冲突,后果及其严重的情况应该使用

13、悲观锁;对于要求性能和效率的数据访问频率高,即使发生数据冲突后果也不是很严重的情况可以使用乐观锁。,返回,10.3 缓存机制,任何成熟的应用系统都要考虑系统的性能,而提升系统性能最好的方式就是使用缓存。缓存原理一级缓存二级缓存第三方缓存,返回,10.3.1 缓存机制缓存原理(1),Hibernate中的缓存是为了减少不必要的数据库访问而提出来的。在缓存中存储从数据库提取的供应用程序处理的数据。应用程序可以通过主键进行数据查询,在查询的过程中将频繁读取的数据加载到缓存中,下次程序请求数据时直接访问缓存就可以得到目标数据,这样可以减少访问数据库的频率,减少系统开销。,10.3.1 缓存机制缓存原理

14、(2),Hibernate缓存原理示意图如右图所示,Hibernate中的Session类提供了事务级别的一级缓存,缓存中的数据在事务提交以后会马上清空。二级缓存是SessionFactory范围内的缓存技术,二级缓存依靠缓存并发策略、查询缓存、缓存适配器和缓存的实现策略等来使用。二级缓存在读/写比例高的数据时可以明显地优化系统性能。此外Hibernate还提供了第三方的缓存插件的使用,扩展了Hibernate的使用范围。,返回,10.3.2 缓存机制一级缓存(1),Hibernate的一级缓存是由Session开启的缓存,由Session负责它的生命周期,通常一个Session都对应一个应用

15、事务或者数据库的事务。当事务提交以后,缓存中的数据也被清空。用Session的如下方法时,数据对象就被加载到了一级缓存:save()、update()、saveOrUpdate():保存、更新或者是更新后保存方法。load()、find()、list():查询指定的对象方法。使用Session的如下方法时,可以清空缓存:evict():从缓存中清空指定属性类型的持久化对象。clear():清空缓存中所有的数据。,10.3.2 缓存机制一级缓存(2),Session缓存存放的数据量很少,当数据的数目超过一定数量或达到内存限定的数目后会导致系统异常。因此应定期清理Session缓存,示例如下 Se

16、ssion session=sessionFactory.openSession();/实例化SessionTransaction tx=session.beginTransaction();/定义事务处理对象tx.begin();/开始事务for(int i=0;i50000;i+)BookInfoVo book=new BookInfoVo();session.save(book);/保存图书信息数据if(i%100=0)/每保存100条数据后清空缓存session.flush();session.clear();mit();/提交事务session.close();/关闭session,

17、返回,10.3.3 缓存机制二级缓存(1),Session共享的缓存就是Hibernate提供的二级缓存。二级缓存是进程范围和集群范围的缓存。通常将访问频率较高的数据存储到二级缓存中,以优化系统性能,较短响应时间。由于二级缓存中的数据量较大,通常将数据存储到内存或者是硬盘中。使用二级缓存时必须了解并配置缓存的并发策略。Hibernate支持的并发策略如下,10.3.3 缓存机制二级缓存(2),Hibernate的二级缓存都是通过第三方插件来实现的,常用的4个插件如下:EHCache:来自与Hibernate的源码组织的另一个项目。是一个进程范围内的,支持Hibernate的查询缓存。OpenS

18、ymphoy OSCach:是进程范围内的缓存,使用内存或者是硬盘来存储缓存数据,提供丰富的缓存数据过期策略。同样支持Hibernate的查询缓存。SwarmCache:只支持集群范围的缓存,不支持查询缓存。JBossCache:来源于JBoss开源组织,支持集群范围和查询缓存,10.3.3 缓存机制二级缓存(3),各插件对并发访问策略的支持及对应适配器如下表所示,返回,10.3.4 缓存机制第三方缓存(1),Hibernate二级缓存最常用的第三方插件是EHCache,该缓存使用方式如下:1)在hibernate.cfg.xml 配置EHCache,配置内容为 true2)在工程中加入EHC

19、ache的配置文件ehcache.xml并进行配置,该文件各属性说明如下diskStore:配置缓存文件的位置。maxElementsInMemory:允许在缓存中创建最多的对象数。eternal:缓存中的对象是否永久保存,如果配置为“true”那么将忽略超时设置。timeToIdleSeconds:缓存数据钝化的时间。timeToLiveSeconds:缓存数据的生存时间。overflowToDisk:内存空间不足时,是否启用磁盘缓存。,10.3.4 缓存机制第三方缓存(2),具体配置内容为,10.3.4 缓存机制第三方缓存(3),3)在映射文件中配置并发访问策略。如果只对操作表实现并发访问,那么在标签下使用标签配置并发访问策略。如果需要在当前表关联的其他表中使用并发访问策略,那么在标签内也要配置配置方式如下,10.3.4 缓存机制第三方缓存(4),返回,

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 生活休闲 > 在线阅读


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号