已阅读5页,还剩24页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第10章Hibernate性能优化,10.1事务处理10.2并发控制10.3缓存机制,10.1事务处理,事务的概念JDBC事务处理JTA事务处理,返回,10.1.1事务处理事务的概念,事务(Transaction)是访问数据库时,可能更新数据库中各种数据项的一个程序执行单元,用来确保数据的完整性,避免数据库中的数据在不正确的操作下引起的错误更改。事务的4个特性:原子性。指事务执行单元是一个不可分割的单元,这些单元要么都执行,要么都不执行。一致性。指无论执行了什么操作,都应保证数据的完整性和业务逻辑的一致性。隔离性。在事务执行过程中,多个执行单元间操作的数据都是其他单元没有操作或者操作结束后的数据,保证每一个执行单元操作的数据都有完整的数据空间。持久性。事务结束后,执行单元操纵的数据被保存在数据库中,这些数据的保存状态是永久性的,不会因为系统故障而消失。,返回,10.1.2事务处理JDBC事务处理(1),Hibernate框架中支持两种事务处理方式:JDBC事务处理和JTA(JavaTransactionAPI)事务处理,这两种事务处理方式默认情况下都是关闭的,可以通过配置开启事务管理。如果不进行配置那么会默认使用JDBC事务。JDBC事务应用:1.声明JDBC事务管理,配置方式:hibernate.cfg.xml中的配置方式net.sf.hibernate.transcation.JDBCTranscationFactory,10.1.2事务处理JDBC事务处理(2),perties的配置方式hibernate.transcation.factory_class=net.sf.hibernate.transcation.JDBCTranscationFactory2.编程过程中应用JDBC事务管理流程:实例化Configure类读取配置文件或者属性文件。获得SessionFactory实例。获得Session实例。通过session.beginTransaction()获得事务Transaction对象。开始事务:进行数据操作。提交事务:数据处理结束后提交事务。回滚事务:如果数据处理出现异常那么回滚事务,恢复原始数据。结束事务:通过session.close结束事务。,10.1.2事务处理JDBC事务处理(3),3.应用JDBC事务管理实例:Configurationconfig=newConfiguration();/实例化Configure类/省略业务代码sessionFactory=config.buildSessionFactory();/建立Session工厂Sessionsession=sessionFactory.openSession();/开启会话Transactiontx=null;/定义事务处理对象trytx=session.beginTransaction();/开始事务tx.begin();/省略数据处理代码mit();/提交事务catch(Exceptione)e.printStackTrace();tx.rollback();/回滚事务finallysession.close();/关闭Session,返回,10.1.3事务处理JTA事务处理(1),JTA(JavaTransactionAPI)是J2EE事务服务的标准解决方式,通过容器来控制事务。主要应用在多数据库操作的分布式系统中。JTA事务应用:1.声明JTA事务管理,配置方式:hibernate.cfg.xml中的配置方式net.sf.hibernate.transcation.JTATranscationFperties的配置方式hibernate.transcation.factory_class=net.sf.hibernate.transcation.JTATranscationFactory,10.1.3事务处理JTA事务处理(2),2.编程过程中应用JTA事务管理流程:创建JTA事务对象。开始事务。获得Session并编写操作数据的方法。关闭Session。提交事务。如果遇到异常事件则回滚事务。3.应用JDBC事务管理实例:tryUserTransactiontx=null;/创建JTA事务tx=(UserTransaction)newInitialContext().lookup(javax.transaction.UserTransaction);tx.begin();/开始事务,10.1.3事务处理JTA事务处理(3),Sessionsession1=sessionFactory.openSession();/创建第一个Session/省略数据处理代码session1.flush();session1.close();Sessionsession2=sessionFactory.openSession();/创建第二个Session/省略数据处理代码session2.flush();session2.close();mit();/提交事务catch(Exceptione)tx.rollback();/回滚事务JTA事务处理首先创建事务处理对象,然后实例化Session,它的事务生命周期要长于Session的生命周期。JTA事务处理与JDBC事务处理不可同时使用。,返回,10.2并发控制,在Hibernate应用中,并发主要是指是同一个时间段内多个事务共同请求同一个资源。对于并发如果不进行相应的控制,将产生一系列问题。并发问题解决方案,返回,10.2.1并发控制并发问题(1),第一类丢失更新。当两个或多个事务同时更新同一资源时,第一个事务已经更新了数据,而第二个事务由于被中断而撤销了事务,导致第一个事务也被撤销,那么数据将恢复到初始状态。脏读。当两个或者多个事务同时操作一个资源时,第一个事务更新了数据但未提交,此时第二个事务读取了该条数据并进行了处理。此时第一个事务由于某种原因被撤销了,那么第二个事务处理的数据就称为脏数据。虚读。虚读是由于当前的一个事务查询到了另一个事务新插入的数据而引起的。当第一个事务查询了数据库的记录数时,第二个事务向数据库中增加了一条记录,改变了当前的记录数目,那么第一个事务获得的数据就是虚读的数据,该数据与数据库中的实际数据不相同。,10.2.1并发控制并发问题(2),不可重复读。当第一个事务修改数据时,第二个事务在它的提交事务的前后,两次读取了第一个事务所修改的数据,导致第二个事务两次读取的数据不匹配。第二类丢失更新。第二类丢失更新是不可重复读的一个特例。当多个事务同时读取到了一条资源记录,分别根据自身的逻辑进行处理,最后分别提交事务。问题发生在最后提交的事务将会覆盖前面所有已经提交的事务的数据,导致最终的数据完整性被破坏。,返回,10.2.2并发控制解决方案(1),为了解决在事务并发过程中出现的问题,Hibernate提供了一种特殊的处理方式锁。锁有两种形式:悲观锁和乐观锁。悲观锁。认为所有的事务都在请求当前事务正在处理的资源,因此将正在处理数据资源上锁,其他所有事务都不可以访问上锁的资源。只有当前的事务提交后,其他事务才可以访问刚刚被锁定的数据。Query类和Criteria类的setLockMode()方法及Session类的load()和lock()方法都可以进行加锁。锁定模式如下,10.2.2并发控制解决方案(2),10.2.2并发控制解决方案(3),乐观锁。认为访问数据库的事务很少发生数据访问错误等问题。当数据出现了不一致状态时,Hibernate采用版本检查和时间戳等技术来实现读取数据。1)版本控制。版本控制技术是在操作的数据表中增加一个版本号字段,习惯上将该版本号命名为version。当一个新事务到来时,首先加载版本号,如果版本号和数据库中的版本号相等,那么允许事务进行数据操作,否则给出警告信息,数据操作人员可以选择继续还是放弃当前的操作。版本控制使用方法:a)在数据表中增加版本控制字段,例如增加int类型的version字段。b)在该表对应的持久化类中增加int类型的属性version,并编写getter和setter方法。c)在映射文件中配置该字段和属性的映射,配置的版本字段和属性值间的映射必须填写在字段下面,配置方式如下,10.2.2并发控制解决方案(4),注意:使用版本控制技术是通过程序来实现的锁定机制,如果一个事务更改了版本信息,那么另一个事务必须先获得新版本号以后才可以进行数据操作。2)时间戳。使用时间戳就是在数据表中增加一个时间类型的版本号,操作数据的事务必须匹配当前的时间才可以进行数据操作。时间戳的使用方法:a)在数据表中建立时间类型(timestamp)字段,例如lastedtimeb)在该表对应的持久化类中增加Date类型的属性lastedtime,并编写getter和setter方法。c)在映射文件中进行配置,配置时间戳的标签要写在标签下面,配置方式如下,10.2.2并发控制解决方案(5),锁的使用原则:对于数据访问频率较低并且一旦产生冲突,后果及其严重的情况应该使用悲观锁;对于要求性能和效率的数据访问频率高,即使发生数据冲突后果也不是很严重的情况可以使用乐观锁。,返回,10.3缓存机制,任何成熟的应用系统都要考虑系统的性能,而提升系统性能最好的方式就是使用缓存。缓存原理一级缓存二级缓存第三方缓存,返回,10.3.1缓存机制缓存原理(1),Hibernate中的缓存是为了减少不必要的数据库访问而提出来的。在缓存中存储从数据库提取的供应用程序处理的数据。应用程序可以通过主键进行数据查询,在查询的过程中将频繁读取的数据加载到缓存中,下次程序请求数据时直接访问缓存就可以得到目标数据,这样可以减少访问数据库的频率,减少系统开销。,10.3.1缓存机制缓存原理(2),Hibernate缓存原理示意图如右图所示,Hibernate中的Session类提供了事务级别的一级缓存,缓存中的数据在事务提交以后会马上清空。二级缓存是SessionFactory范围内的缓存技术,二级缓存依靠缓存并发策略、查询缓存、缓存适配器和缓存的实现策略等来使用。二级缓存在读/写比例高的数据时可以明显地优化系统性能。此外Hibernate还提供了第三方的缓存插件的使用,扩展了Hibernate的使用范围。,返回,10.3.2缓存机制一级缓存(1),Hibernate的一级缓存是由Session开启的缓存,由Session负责它的生命周期,通常一个Session都对应一个应用事务或者数据库的事务。当事务提交以后,缓存中的数据也被清空。用Session的如下方法时,数据对象就被加载到了一级缓存:save()、update()、saveOrUpdate():保存、更新或者是更新后保存方法。load()、find()、list():查询指定的对象方法。使用Session的如下方法时,可以清空缓存:evict():从缓存中清空指定属性类型的持久化对象。clear():清空缓存中所有的数据。,10.3.2缓存机制一级缓存(2),Session缓存存放的数据量很少,当数据的数目超过一定数量或达到内存限定的数目后会导致系统异常。因此应定期清理Session缓存,示例如下Sessionsession=sessionFactory.openSession();/实例化SessionTransactiontx=session.beginTransaction();/定义事务处理对象tx.begin();/开始事务for(inti=0;i50000;i+)BookInfoVobook=newBookInfoVo();session.save(book);/保存图书信息数据if(i%100=0)/每保存100条数据后清空缓存session.flush();session.clear();mit();/提交事务session.close();/关闭session,返回,10.3.3缓存机制二级缓存(1),Session共享的缓存就是Hibernate提供的二级缓存。二级缓存是进程范围和集群范围的缓存。通常将访问频率较高的数据存储到二级缓存中,以优化系统性能,较短响应时间。由于二级缓存中的数据量较大,通常将数据存储到内存或者是硬盘中。使用二级缓存时必须了解并配置缓存的并发策略。Hibernate支持的并发策略如下,10.3.3缓存机制二级缓存(2),Hibernate的二级缓存都是通过第三方插件来实现的,常用的4个插件如下:EHCache:来自与Hibernate的源码组织的另一个项目。是一个进程范围内的,支持Hibernate的查询缓存。OpenSymphoyOSCach:是进程范围内的缓存,使用内存或者是硬盘来存储缓存数据,提供丰富的缓存数据过期策略。同样支持Hibernate的查询缓存。SwarmCache:只支持集群范围的缓存,不支持查询缓存。JBossCa
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 增量合同情况说明模板(3篇)
- 安全风险分析工具与合规性检查模板
- 秋天的枫叶美景描写8篇范文
- 2025年文化创意产业发展策略与国际合作研究报告及未来发展趋势预测
- 香港劳工电工考试题库及答案
- 维修电工二级技师考试题库及答案
- 电工绳结技能考试题库及答案
- 妈妈的围巾家的温暖写物(11篇)
- 2025年数字内容行业数字内容与娱乐产业研究报告及未来发展趋势预测
- 2025年汽车智能网联行业智能网联汽车技术发展研究报告及未来发展趋势预测
- 每日工作报表格式
- 人教版九年级化学《氢氧化钠化学性质的实验创新研究》
- 2024排油烟设施清洗及验收技术规程
- 腺垂体功能减退课件
- 晕厥的诊断与处理流程欧洲心脏病协会ESC课件
- YYT 0689-2008 血液和体液防护装备 防护服材料抗血液传播病原体穿透性能测试 Phi-X174噬菌体试验方法
- 两人合伙购车简单协议书
- DL-T5798-2019水电水利工程现场文明施工规范
- 财务工作移交清单模板
- 2024届湖南省高三下学期适应性考试地理含答案
- JB-T 14314-2022 活塞式调流阀
评论
0/150
提交评论