本贴作者 xyz20003
大多数反对使用hibernate的同志,张口必说hibernate有性能问题,不好调优,对DBA不友好。可从来没有任何一个人具体指出hibernate哪里有性能问题,为什么不能调优,哪方面对DBA不友好。
大家去面试过,有些同志也有面试别人的经验,应该明白一点:务虚很容易。什么性能啦,什么并发啦,什么管理啦。每个人张口都可以说出很多来,但是一旦开始玩真格的,那些没有实际经验的就会原型毕露了。不是我心眼坏,戴着有色眼镜去看人,而是社会复杂,害人之心不可有,防人之心不可无。精准的批评是一种鞭策,有则改之无则加勉。关键在于是否存在“三人成虎”的情况呢?
让咱们化繁为简吧,只问一句话:“阁下认为hibernate有性能问题,sql无法调优。”这个想法是切身体会呢?还是以讹传讹而来呢?如果是切身体会,那么恳请阁下受累一下,劳烦您把出现的问题稍微详细的描述一下,如果有可能的话,最好还能和大家稍微讨论一下这个问题出现的原因,以及解决方法。
下面算是我在实际项目中遇到的一些性能出现问题的场景,以及解决的方法,想必大家用过hibernate都应该耳闻能熟了,但是为了避免自己出现上面所说的“空口无凭”,还是斗胆拿出来献丑了。
1.N+1
场景描述:产品product和产品分类product_category两张表,多对一关系。查询产品列表时,可能出现N+1问题。
解决方法:
1:使用fetch抓取,select p from Product p join fetch p.category c
2:使用map直接搜索需要的列,select new Map(p.id as id, p.name as name, p.category.name as categoryName) from Product p
2.1:1无法lazy
场景描述:申请表头和三张申请子表是一对一关系,其中子表对主表的关联可以实现延迟加载,主表无法延迟加载3个子表。造成每次读取主表以后,都同时发送三个sql查询三个子表的信息。
解决方法:一对一关系的一方无法延迟加载是hibernate本身的bug,虽然可以使用instrument解决,但是要对字节码进行静态加强,不如直接改成多对一关联。
3.大批量插入数据
场景描述:导入数据过多时,一级缓存会迅速膨胀,有时导致内存溢出。
解决方法:我们用的方法是每隔一定数目(200条)就执行session.flush()和session.clear(),现在看来还是应该是用jdbc批量插入,或者应该直接导入到数据库里。
回过头来看一下,平常遇到的问题,基本都是因为N+1以及延迟加载使用的太随意造成的,我们对二级缓存的使用也不多,只是把一些常用的数据字典一次性缓存到内存里了。剩下的批量插入,批量更新,确实不应该依靠hibernate来解决,这时候幸好我们还有其他选择,使用hibernate也可以满足我们80%以上的需求。
下面就期待同仁提出实例反证了,向大家多多学习。
分享到:
相关推荐
本话题将深入探讨“Hibernate性能测试代码”,以帮助我们理解如何有效地评估和优化Hibernate在实际应用中的表现。 首先,性能测试是软件开发过程中的关键环节,它旨在确定系统的响应时间、吞吐量和资源利用率等指标...
### Hibernate性能优化研究 #### 一、引言 随着企业级应用的发展,高效的数据持久化技术成为了提升系统性能的关键因素之一。Hibernate作为一种流行的面向Java环境的对象关系映射(Object-Relational Mapping,简称...
《Hibernate性能优化》 在Java应用开发中,Hibernate作为一个强大的对象关系映射(ORM)框架,极大地简化了数据库操作。然而,如果不进行适当的优化,它可能会成为系统性能的瓶颈。以下是一些关于Hibernate性能优化...
珍藏的hibernate性能优化,如果对hibernate进行优化,很详细,是工作和面试的好助手
### 优化Hibernate性能的几点建议 #### 一、调整Fetch Size以提高性能 在使用Hibernate进行数据查询时,Fetch Size的设置对性能有着显著的影响。Fetch Size是指每次从数据库中取出的数据行数,默认情况下,Oracle...
【提高Hibernate性能】 在开发大型企业级应用时,ORM框架如Hibernate在处理大量数据时可能会出现性能瓶颈。针对这种情况,优化Hibernate的配置和使用策略至关重要。以下是一些提高Hibernate性能的关键点: 1. **...
本文将深入探讨Hibernate性能优化中的一个重要概念——一级缓存,并结合给出的压缩包文件“hibernate_cache_level1”,来详细解析一级缓存的工作原理及其优化策略。 一级缓存是Hibernate内置的一种缓存机制,它存在...
### Hibernate性能:性能、规模与风险初评 #### 一、引言 随着软件系统的不断发展,数据持久化技术成为现代应用程序不可或缺的一部分。其中,Hibernate作为一款流行的Java ORM(Object Relational Mapping)框架,...
Hibernate 性能优化 在 Hibernate 中,性能优化是非常重要的,因为它直接影响着应用程序的效率和可扩展性。...Hibernate 性能优化需要我们注意批量处理和 1+n 问题,并使用相应的解决方法来避免这些问题。
《Hibernate性能调优》 在Java企业级应用开发中,Hibernate作为一款强大的对象关系映射(ORM)框架,被广泛用于数据库操作。然而,如果不合理地使用或配置,Hibernate可能会导致性能瓶颈。本文将深入探讨如何对...
《Hibernate性能优化共9页.pdf》的压缩包文件聚焦于Java开发中的一个重要框架——Hibernate的性能调优。Hibernate作为一款强大的对象关系映射(ORM)框架,极大地简化了数据库操作,但同时也可能带来性能问题。以下...
然而,对于初次接触 Hibernate 的开发者来说,可能会遇到性能方面的问题,尤其是在与传统的 JDBC 方式相比时。这些问题如果不加以解决,很容易影响到项目的整体进度。本文将详细介绍如何优化 Hibernate 的性能,并...
的效率低于直接JDBC存取,然而,在经过比较好的性能优化之后,Hibernate的性能还是让人相当满意的, 特别是应用二级缓存之后,甚至可以获得比较不使用缓存的JDBC更好的性能,下面介绍一些通常的 Hibernate的优化策略...
【描述】:在使用 Hibernate 进行数据库操作时,性能问题时常出现,但通过适当的调整和优化,我们可以显著提高 Hibernate 的执行效率,甚至达到接近或超过直接使用 JDBC 的效果。本文将探讨几个关键的优化策略。 ...
在IT领域,尤其是在Java开发中,Hibernate作为一款流行的开源对象关系映射(ORM)框架,其缓存机制是实现高性能数据库交互的关键技术之一。本文将深入探讨Hibernate缓存的原理、类型及其对性能优化的影响。 ### ...
在进行大型项目开发时,性能优化是至关重要的,特别是对于基于SSH(Struts、Spring、Hibernate)这样的企业级框架的应用。SSH性能优化主要是针对Struts的MVC处理、Spring的依赖注入以及Hibernate的对象关系映射进行...