`
longgangbai
  • 浏览: 7331738 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

Hibernate事务缓存优化

阅读更多

 

hibernate优化

 

session控制

 为了避免session创建的开销,需要对session的创建进行控制

 当前行为:

  使用ThreadLocal的方式控制session的创建

  使用filter的方式创建和关闭session

  尚未配置filter

   此行为仅仅使用web开发中应用。

 

事务控制

    针对hibernate由三种dao操作 find save flush

    find即查询不需要开事务,所以可以考虑针对查询不使用事务控制

    针对saveOrUpdate使用事务

    现在事务提交是在filter结束的时候去做

    但有一些action中是不需要事务的,频繁开关事务可能会带来一定的系统开销

    当前测试使用和不使用事务进行查询测试结果(根据ID查询记录100次时间比较)

        不开事务 421ms

        打开事务 516ms

    事务的开关最好限定在方法内部,可以考虑在service方法中开关事务,可以避免这个问题

    session关闭和事务提交的时候,hibernate会主动调用flush方法进行数据库同步

    所以在当前项目中不需要关心flush方法

 

事务实现选用和配置

 使用jdbc事务控制

 不选用jta作为事务的实现

  放弃理由

   当前测试服务器tomcat本身仅仅是个web server,并不支持jta  

  配置hibernate属性信息

   hibernate.transaction.factory_class net.sf.hibernate.transaction.JTATransactionFactory

              net.sf.hibernate.transaction.JDBCTransactionFactory

  jta的好处

   JTA提供了跨Session的事务管理能力

   为以后扩展留下了选择空间

  实现

   单一的增删改操作不需要调用session.beginTransaction()等方法

 

   针对多条记录的修改使用下面的方式调用api

   UserTransaction ut = (UserTransaction)(new InitialContext().lookup("java:comp/UserTransaction"));

   ut.begin();

         //.....

         ut.commit();

 

          使用下面的方式也可以同样实现事务控制,但因为hibernate内部同样调用上面的api实现

          处于节省资源的想法,不建议使用

 

   Transaction tx = session.beginTransaction();

   tx.commit();

 

   以后可以考虑使用springaop实现替换当前实现  

 

  tomcat中的配置

   <Resource name="UserTransaction" auth="Container" type="javax.transaction.UserTransaction"/>

      <ResourceParams name="UserTransaction">

      <parameter>

    <name>factory</name>

    <value>org.objectweb.jotm.UserTransactionFactory</value>

      </parameter>

      <parameter>

       <name>jotm.timeout</name>

       <value>60</value>

      </parameter>

      </ResourceParams>             

 

分页控制

 

 通过criteria. setFirstResult/setMaxResults方法可以限制一次查询返回的记录范围

延迟加载

 

 lazy_load

 所有有关数据关联(一对多,多对多等)的映射都需要指定延迟加载

 因为当前系统的session关闭是在filter里面做的,所以不需要控制关联对象的加载

 在特殊的情况下,比如session关闭后获取关联对象

 可以在session关闭前调用Hibernate.initialize()API获取关联对象

 

缓存选用及配置管理

 

 当前选用EHCache作为第二层的缓存(第一层为数据库缓存)

 由于EHCache不支持分布式,所以将来可以考虑使用jgroup实现分布式

 针对系统内大部分的dao操作使用只读(read)

分享到:
评论

相关推荐

    Hibernate缓存,性能优化

    - **一级缓存优化**:确保每个业务逻辑单元只在一个Session内完成,避免不必要的Session开启和关闭,减少一级缓存的刷新次数,从而提高性能。 - **二级缓存配置**:根据业务需求选择合适的缓存策略和过期机制,合理...

    Hibernate缓存与spring事务详解

    **标题:“Hibernate缓存与Spring事务详解”** 在IT领域,尤其是Java开发中,Hibernate作为一款流行的ORM(对象关系映射)框架,极大地简化了数据库操作。而Spring框架则以其全面的功能,包括依赖注入、AOP(面向切...

    hibernate缓存和事务

    Hibernate 是一个流行的对象关系映射(ORM)框架,它允许Java...通过理解Hibernate缓存和事务管理,以及如何有效地执行查询,开发者可以创建高效、健壮的Java应用程序,降低与数据库交互的复杂性,同时提升系统性能。

    HIBERNATE的缓存机制

    总结来说,Hibernate的缓存机制包括一级缓存和二级缓存,它们协同工作以优化数据库操作。一级缓存是必不可少的,提供事务级别的数据管理;二级缓存则是可选的,用于进一步提升性能,但需要根据数据的特性和访问模式...

    Hibernate一级缓存、二级缓存以及查询缓存实例

    在Java的持久化框架Hibernate中,缓存机制是优化数据库操作性能的重要手段。本文将深入探讨Hibernate的一级缓存、二级缓存以及查询缓存,通过具体的实例来阐述它们的工作原理和使用方法。 首先,我们从一级缓存开始...

    hibernate一级缓存和二级缓存的区别与联系

    Hibernate 是一个流行的对象关系映射(ORM)框架,它提供了数据缓存机制以优化数据库访问性能。缓存机制分为一级缓存和二级缓存,两者都有助于减少对物理数据库的直接访问,从而提高应用程序的运行效率。 一级缓存...

    Hibernate 事务和并发控制

    此外,Hibernate还支持读写分离和第二级缓存来优化并发性能。读写分离将读操作和写操作分散到不同的数据库实例上,减轻主库压力。第二级缓存可以存储已查询过的对象,减少对数据库的直接访问,提高系统性能。...

    Hibernate缓存深入详解

    总结来说,Hibernate的缓存机制是其性能优化的重要手段。正确理解和配置缓存,可以显著提升数据访问效率,降低数据库压力,同时在分布式环境下保证数据的一致性。不过,缓存的使用也需要谨慎,过度依赖缓存可能会...

    hibernate缓存机制

    选择合适的缓存范围和并发访问策略对于优化Hibernate应用程序至关重要。开发者应根据应用程序的需求和预期的并发行为来调整这些设置,以达到最佳的性能和数据一致性。在使用第二级缓存时,尤其需要注意数据同步和...

    Hibernate缓存技术研究

    ### Hibernate缓存技术研究 #### 一、引言 Hibernate是一种强大的对象-关系映射(Object-Relational Mapping,简称ORM)工具,主要用于Java环境下的应用程序。它能够将应用程序中的对象模型映射到关系型数据库的表...

    Hibernate性能优化:一级缓存

    本文将深入探讨Hibernate性能优化中的一个重要概念——一级缓存,并结合给出的压缩包文件“hibernate_cache_level1”,来详细解析一级缓存的工作原理及其优化策略。 一级缓存是Hibernate内置的一种缓存机制,它存在...

    Hibernate缓存深入详解 from ITEye

    **Hibernate缓存深入详解** 在Java企业级应用开发中,Hibernate作为一款强大的对象关系映射(ORM)框架,极大地简化了数据库操作。然而,随着应用规模的扩大,...在实践中不断探索和优化,才能更好地发挥缓存的优势。

    hibernate一级缓存、二级缓存和查询缓存

    一级缓存是Hibernate内置的Session级别的缓存,也被称为事务性缓存。每当我们在Session中进行对象的CRUD(创建、读取、更新、删除)操作时,这些操作实际上并未立即同步到数据库,而是被暂时保存在一级缓存中。一级...

    Hibernate的缓存机制

    Hibernate的缓存机制是优化数据访问性能的关键技术之一。它主要分为一级缓存和二级缓存,以及查询缓存。 1. **一级缓存(Session级别缓存)**: - 一级缓存是每个Hibernate Session实例私有的,属于事务范围的缓存...

    hibernate的缓存机制和session对象的产生方式案例

    总的来说,理解和熟练运用Hibernate的缓存机制以及Session的管理方式,对于优化应用性能、减少数据库负载至关重要。在实际开发中,开发者应根据项目需求和性能要求,合理配置和使用缓存,以及选择合适的Session管理...

    hibernate二级缓存

    总的来说,Hibernate的二级缓存是优化数据库访问的关键工具,通过合理配置和使用,能够显著提升应用的响应速度和并发处理能力。不过,需要注意的是,由于缓存可能会导致数据一致性问题,因此在设计缓存策略时,必须...

    Hibernate一级缓存和二级缓存

    2. **事务隔离**:一级缓存是事务性的,保证了在同一个事务中的数据一致性。 3. **瞬时状态到持久状态的转换**:新创建的对象在Session内可以先处于瞬时状态,一旦被持久化,就会被放入一级缓存。 **二、Hibernate...

Global site tag (gtag.js) - Google Analytics