Java Web程序设计教程 教学课件 PPT 作者 范立锋 林果园 第10章 Hibernate性能优化

上传人:E**** 文档编号:89401704 上传时间:2019-05-24 格式:PPT 页数:29 大小:200KB
返回 下载 相关 举报
Java Web程序设计教程 教学课件 PPT 作者 范立锋 林果园 第10章  Hibernate性能优化_第1页
第1页 / 共29页
Java Web程序设计教程 教学课件 PPT 作者 范立锋 林果园 第10章  Hibernate性能优化_第2页
第2页 / 共29页
Java Web程序设计教程 教学课件 PPT 作者 范立锋 林果园 第10章  Hibernate性能优化_第3页
第3页 / 共29页
Java Web程序设计教程 教学课件 PPT 作者 范立锋 林果园 第10章  Hibernate性能优化_第4页
第4页 / 共29页
Java Web程序设计教程 教学课件 PPT 作者 范立锋 林果园 第10章  Hibernate性能优化_第5页
第5页 / 共29页
点击查看更多>>
资源描述

《Java Web程序设计教程 教学课件 PPT 作者 范立锋 林果园 第10章 Hibernate性能优化》由会员分享,可在线阅读,更多相关《Java Web程序设计教程 教学课件 PPT 作者 范立锋 林果园 第10章 Hibernate性能优化(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中的配置方式 net.s

3、f.hibernate.transcation.JDBCTranscationFactory ,10.1.2 事务处理JDBC事务处理(2),hibernate.properties的配置方式 hibernate.transcation.factory_class= net.sf.hibernate.transcation.JDBCTranscationFactory 2.编程过程中应用JDBC事务管理流程: 实例化Configure类读取配置文件或者属性文件。 获得SessionFactory实例。 获得Session实例。 通过session.beginTransaction()获得事务T

4、ransaction对象。 开始事务:进行数据操作。 提交事务:数据处理结束后提交事务。 回滚事务:如果数据处理出现异常那么回滚事务,恢复原始数据。 结束事务:通过session.close结束事务。,10.1.2 事务处理JDBC事务处理(3),3. 应用JDBC事务管理实例: Configuration config=new Configuration(); /实例化Configure类 /省略业务代码 sessionFactory=config.buildSessionFactory(); /建立Session工厂 Session session=sessionFactory.openS

5、ession(); /开启会话 Transaction tx=null; /定义事务处理对象 try tx=session.beginTransaction(); /开始事务 tx.begin(); /省略数据处理代码 mit(); /提交事务 catch(Exception e) e.printStackTrace(); tx.rollback(); /回滚事务 finally session.close(); /关闭Session ,返回,10.1.3 事务处理JTA事务处理(1),JTA(Java Transaction API)是J2EE事务服务的标准解决方式,通过容器来控制事务。主要

6、应用在多数据库操作的分布式系统中。 JTA事务应用: 1.声明JTA事务管理,配置方式: hibernate.cfg.xml中的配置方式 net.sf.hibernate.transcation.JTATranscationFactory hibernate.properties的配置方式 hibernate.transcation.factory_class= net.sf.hibernate.transcation.JTATranscationFactory,10.1.3 事务处理JTA事务处理(2),2.编程过程中应用JTA事务管理流程: 创建JTA事务对象。 开始事务。 获得Sessi

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

8、理代码 session1.flush(); session1.close(); Session session2=sessionFactory.openSession(); /创建第二个Session /省略数据处理代码 session2.flush(); session2.close(); mit(); /提交事务 catch (Exception e) tx.rollback(); /回滚事务 JTA事务处理首先创建事务处理对象,然后实例化Session,它的事务生命周期要长于Session的生命周期。 JTA事务处理与JDBC事务处理不可同时使用。,返回,10.2 并发控制,在Hiber

9、nate应用中,并发主要是指是同一个时间段内多个事务共同请求同一个资源 。对于并发如果不进行相应的控制,将产生一系列问题。 并发问题 解决方案,返回,10.2.1 并发控制并发问题(1),第一类丢失更新。当两个或多个事务同时更新同一资源时,第一个事务已经更新了数据,而第二个事务由于被中断而撤销了事务,导致第一个事务也被撤销,那么数据将恢复到初始状态。 脏读。当两个或者多个事务同时操作一个资源时,第一个事务更新了数据但未提交,此时第二个事务读取了该条数据并进行了处理。此时第一个事务由于某种原因被撤销了,那么第二个事务处理的数据就称为脏数据。 虚读。虚读是由于当前的一个事务查询到了另一个事务新插入

10、的数据而引起的。当第一个事务查询了数据库的记录数时,第二个事务向数据库中增加了一条记录,改变了当前的记录数目,那么第一个事务获得的数据就是虚读的数据,该数据与数据库中的实际数据不相同。,10.2.1 并发控制并发问题(2),不可重复读。当第一个事务修改数据时,第二个事务在它的提交事务的前后,两次读取了第一个事务所修改的数据,导致第二个事务两次读取的数据不匹配 。 第二类丢失更新 。第二类丢失更新是不可重复读的一个特例。当多个事务同时读取到了一条资源记录,分别根据自身的逻辑进行处理,最后分别提交事务。问题发生在最后提交的事务将会覆盖前面所有已经提交的事务的数据,导致最终的数据完整性被破坏 。,返

11、回,10.2.2 并发控制解决方案(1),为了解决在事务并发过程中出现的问题,Hibernate提供了一种特殊的处理方式锁。锁有两种形式:悲观锁和乐观锁。 悲观锁。认为所有的事务都在请求当前事务正在处理的资源,因此将正在处理数据资源上锁,其他所有事务都不可以访问上锁的资源。只有当前的事务提交后,其他事务才可以访问刚刚被锁定的数据。 Query类和Criteria类的setLockMode()方法及Session类的load()和lock()方法都可以进行加锁 。锁定模式如下,10.2.2 并发控制解决方案(2),10.2.2 并发控制解决方案(3),乐观锁。认为访问数据库的事务很少发生数据访问

12、错误等问题。当数据出现了不一致状态时,Hibernate采用版本检查和时间戳等技术来实现读取数据。 1)版本控制。版本控制技术是在操作的数据表中增加一个版本号字段,习惯上将该版本号命名为version。当一个新事务到来时,首先加载版本号,如果版本号和数据库中的版本号相等,那么允许事务进行数据操作,否则给出警告信息,数据操作人员可以选择继续还是放弃当前的操作。 版本控制使用方法: a)在数据表中增加版本控制字段,例如增加int类型的version字段 。 b)在该表对应的持久化类中增加int类型的属性version,并编写getter和setter方法。 c)在映射文件中配置该字段和属性的映射,

13、配置的版本字段和属性值间的映射必须填写在字段下面,配置方式如下,10.2.2 并发控制解决方案(4), 注意:使用版本控制技术是通过程序来实现的锁定机制,如果一个事务更改了版本信息,那么另一个事务必须先获得新版本号以后才可以进行数据操作。 2) 时间戳。使用时间戳就是在数据表中增加一个时间类型的版本号,操作数据的事务必须匹配当前的时间才可以进行数据操作。 时间戳的使用方法: a)在数据表中建立时间类型(timestamp)字段,例如lastedtime b)在该表对应的持久化类中增加Date类型的属性lastedtime,并编写getter和setter方法。 c)在映射文件中进行配置,配置时

14、间戳的标签要写在标签下面,配置方式如下,10.2.2 并发控制解决方案(5), 锁的使用原则: 对于数据访问频率较低并且一旦产生冲突,后果及其严重的情况应该使用悲观锁;对于要求性能和效率的数据访问频率高,即使发生数据冲突后果也不是很严重的情况可以使用乐观锁。,返回,10.3 缓存机制,任何成熟的应用系统都要考虑系统的性能,而提升系统性能最好的方式就是使用缓存。 缓存原理 一级缓存 二级缓存 第三方缓存,返回,10.3.1 缓存机制缓存原理(1),Hibernate中的缓存是为了减少不必要的数据库访问而提出来的。在缓存中存储从数据库提取的供应用程序处理的数据。应用程序可以通过主键进行数据查询,在

15、查询的过程中将频繁读取的数据加载到缓存中,下次程序请求数据时直接访问缓存就可以得到目标数据,这样可以减少访问数据库的频率,减少系统开销。,10.3.1 缓存机制缓存原理(2),Hibernate缓存原理示意图如右图所示, Hibernate中的Session类提供了事务级别的一级缓存,缓存中的数据在事务提交以后会马上清空。二级缓存是SessionFactory范围内的缓存技术,二级缓存依靠缓存并发策略、查询缓存、缓存适配器和缓存的实现策略等来使用。二级缓存在读/写比例高的数据时可以明显地优化系统性能。此外Hibernate还提供了第三方的缓存插件的使用,扩展了Hibernate的使用范围。,返

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

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 高等教育 > 大学课件

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号