`

Hebernate 性能优化

 
阅读更多

文章分为十三个小块儿对Hibernate性能优化技巧进行总结性分析,分析如下:

一、在处理大数据量时,会有大量的数据缓冲保存在Session的一级缓存中,这缓存大太时会严重显示性能,所以在使用Hibernate处理大数 据量的,可以使用session. clear()或者session. evict(Object) 在处理过程中,清除全部的缓存或者清除某个对象。

二、对大数据量查询时,慎用list()或者iterator()返回查询结果,

<1>. 使用List()返回结果时,Hibernate会所有查询结果初始化为持久化对象,结果集较

大时,会占用很多的处理时间。

<2>. 而使用iterator()返回结果时,在每次调用iterator.next()返回对象并使用对象时,

Hibernate才调用查询将对应的对象初始化,对于大数据量时,每调用一次查询都会花

费较多的时间。当结果集较大,但是含有较大量相同的数据,或者结果集不是全部都会

使用时,使用iterator()才有优势。

<3>. 对于大数据量,使用qry.scroll()可以得到较好的处理速度以及性能。而且直接对结

果集向前向后滚动。

三、对于关联操作,Hibernate虽然可以表达复杂的数据关系,但请慎用,使数据关系较为

简单时会得到较好的效率,特别是较深层次的关联时,性能会很差。

四、对含有关联的PO(持久化对象)时,若default-cascade="all"或者 “save-update”,新增PO时,请注意对PO中的集合的赋值操作,因为有可能使得多执行一次update操作。

五、在一对多、多对一的关系中,使用延迟加载机制,会使不少的对象在使用时才会初始化,这样可使得节省内存空间以及减少数据库的负荷,而且若PO中的集合没有被使用时,就可减少互数据库的交互从而减少处理时间。

六、对于大数据量新增、修改、删除操作或者是对大数据量的查询,与数据库的交互次数是决定处理时间的最重要因素,减少交互的次数是提升效率的最好途 径,所以在开发过程中,请将show_sql设置为true,深入了解Hibernate的处理过程,尝试不同的方式,可以使得效率提升。

七、Hibernate是以JDBC为基础,但是Hibernate是对JDBC的优化,其中使用Hibernate的缓冲机制会使性能提升,如使用二级缓存以及查询缓存,若命中率较高明,性能会是到大幅提升。

八、Hibernate可以通过设置hibernate.jdbc.fetch_size,hibernate.jdbc.batch_size等属性,对Hibernate进行优化。

九、不过值得注意的是,一些数据库提供的主键生成机制在效率上未必最佳,大量并发insert数据时可能会引起表之间的互锁。数据库提供的主键生成 机制,往往是通过在一个内部表中保存当前主键状态(如对于自增型主键而言,此内部表中就维护着当前的最大值和递增量),之后每次插入数据会读取这个最大 值,然后加上递增量作为新记录的主键,之后再把这个新的最大值更新回内部表中,这样,一次Insert操作可能导致数据库内部多次表读写操作,同时伴随的 还有数据的加锁解锁操作,这对性能产生了较大影响。因此,对于并发Insert要求较高的系统,推荐采用uuid.hex 作为主键生成机制。

十、Dynamic Update 如果选定,则生成Update SQL 时不包含未发生变动的字段属性,这样可以在一定程度上提升SQL执行效能.Dynamic Insert 如果选定,则生成Insert SQL 时不包含未发生变动的字段属性,这样可以在一定程度上提升SQL执行效能

十一、在编写代码的时候请,对将POJO的getter/setter方法设定为public,如果设定为private,Hibernate将无 法对属性的存取进行优化,只能转而采用传统的反射机制进行操作,这将导致大量的性能开销(特别是在1.4之前的Sun JDK版本以及IBM JDK中,反射所带来的系统开销相当可观)。

十二、在one-to-many 关系中,将many 一方设为主动方(inverse=false)将有助性能的改善。

十三、由于多对多关联的性能不佳(由于引入了中间表,一次读取操作需要反复数次查询),因此在设计中应该避免大量使用。

分享到:
评论

相关推荐

    hebernate 学习笔记

    通过马士兵的视频教程,你可以深入学习Hibernate的核心概念,包括实体管理、事务处理、查询语言(HQL)以及性能优化等方面。 【知识点详细说明】: 1. **对象关系映射(ORM)**:ORM是将数据库中的表映射为Java...

    operamasks整合spring、hebernate小例子

    它的主要特点是易于使用、性能优越,并且对浏览器兼容性有良好的支持,使得开发者能够构建出美观且响应式的Web应用。 2. **Spring**:Spring是Java领域的一个开源框架,主要用于简化企业级应用的开发。Spring的核心...

    hebernate与mysql构建框架

    7. **性能优化**:为了提高性能,可以配置二级缓存、批处理、延迟加载等特性。例如,使用`@Cacheable`注解开启缓存,使用`@BatchSize`指定批量操作大小,使用`@LazyCollection(LazyCollectionOption.EXTRA)`实现关联...

    Hibernate书籍

    10. **性能优化**:分享如何通过配置和最佳实践来优化Hibernate应用,减少数据库交互,提高运行效率。 11. **Advanced Topics**:可能包含实体的懒加载、子查询、实体生命周期、拦截器、事件监听器等进阶主题。 ...

    cxf+spring+hibernate整合添加功能实现修改版

    5. **测试与性能优化**:修改版可能包含了更多的单元测试和集成测试,确保修改的功能正确无误。同时,可能针对性能瓶颈进行了调优,比如SQL查询优化、资源池配置调整等。 6. **文件tianjia**:这个文件名可能是项目...

    妙解Hibernate

    二级缓存则是在SessionFactory级别,可跨Session共享,常配合第三方缓存服务如Ehcache使用,进一步优化性能。 事务管理是Hibernate的另一个关键特性。它支持JTA(Java Transaction API)和JDBC事务,确保数据操作的...

    Hibernate中文参考文档V3.2(HTML)

    15. **性能优化**:文档会给出一些最佳实践,如延迟加载、批处理更新、适当使用缓存等,以提升Hibernate应用的性能。 这份中文参考文档全面覆盖了Hibernate 3.2版本的所有关键概念和API,对于初学者和经验丰富的...

    hibernate-dtd文件

    4. **性能优化**:根据项目需求,正确配置缓存策略、批处理大小等,可以显著提升应用程序的性能。 总的来说,`hibernate-dtd`文件是Hibernate框架中不可或缺的一部分,它为XML配置文件提供了结构和语义的约束,增强...

    Hibernate中get和load方法的区别以及close(),clear()、evict()等的区别

    在Hibernate框架中,Session是与数据库交互的主要接口,它提供了...了解这些概念和方法的区别对于高效地使用Hibernate进行数据库操作至关重要,可以根据具体场景选择合适的方法来优化应用程序的性能和数据处理逻辑。

    hibernate-3.6.4.Final.zip

    2. 改进的性能:在这一版本中,Hibernate对缓存机制进行了优化,提升了查询效率,降低了内存消耗。 3. 更强的事务管理:支持JTA(Java Transaction API)和JTASessionContext,提供了更完善的事务控制。 4. 易用性...

    达梦Hibernate方言2.0至4.0

    达梦数据库是国产的一款高性能、高可靠性的关系型数据库管理系统,广泛应用于政府、金融、电信等行业的关键业务系统。它提供了丰富的SQL支持,兼容多种标准,具有良好的可移植性。 Hibernate方言(Dialect)是...

    hibernate学习资料

    11. **性能优化**:包括批处理、懒加载、预加载等技术,用于提升Hibernate应用的性能。 12. **Hibernate与Spring整合**:在企业级应用中,Hibernate通常与Spring框架一起使用,实现依赖注入和事务管理。 以上只是...

    HebernateMysql

    6. **性能优化**:通过配置二级缓存、批处理操作、延迟加载等技术提升Hibernate应用的性能。 7. **示例项目**:压缩包中的"HebernateMysql"可能是包含了上述步骤的一个完整项目,可以作为学习和参考的模板。通过...

    Eclipse插件下载列表

    **简介**:Profiler插件用于性能分析,可以帮助开发者找到代码中的瓶颈,并优化程序性能。 #### 十六、WindowBuilder Pro **名称**:WindowBuilder Pro **链接**:[http://www.swt-designer.com/]...

    operamasks整合spring、jpa(hibernate)测试grid

    标题中的“operamasks整合spring、jpa(hibernate)测试grid”表明这是一个关于将OperaMasks(一个前端框架)与...在实际应用中,还需要考虑性能优化、安全性、异常处理等方面的问题,以确保系统的稳定性和用户体验。

    jhsDemo增删改分页

    后台通过Spring服务接口获取特定页码的数据,结合Hibernate的查询功能,实现对大量数据的分批加载,提高页面加载速度,优化用户体验。 **六、项目实践** "jhsDemo"项目是一个基础的示例,旨在帮助开发者了解和掌握...

Global site tag (gtag.js) - Google Analytics