`

Hibernate性能优化

    博客分类:
  • J2EE
阅读更多
Hibernate性能优化的一些要点:尽量使用many-to-one,避免使用单项one-to-many、灵活使用单向one-to-many、不用一对一,使用多对一代替一对一、.配置对象缓存,不使用集合缓存等。 

Hibernate性能优化有很多方面,在此我们总结了Hibernate性能优化的一些要点,如下:

1.尽量使用many-to-one,避免使用单向one-to-many

2.灵活使用单向one-to-many

3.不用一对一,使用多对一代替一对一

4.配置对象缓存,不使用集合缓存

5.一对多使用Bag 多对一使用Set

6.继承使用显示多态  HQL:from object  polymorphism="exlicit" 避免查处所有对象

7.消除大表,使用二级缓存对于上面这些,我们进行了详细的讲解。

one-to-many:使用inverse=false(default),对象的关联关系是由parent对象来维护的,而inverse=true的情况下,一般用户双向多对多关联,由子对象维护关联关系,增加子对象的时候需要显示:child.setParent(child)为了提高性能,应该尽量使用双向one-to-many inverse=true,在MVC结构中的DAO接口中应该直接用Session持久化对象,避免通过关联关系(这句话有点不理解),而在单项关系中正确使用二级缓存,则可以大幅提高以查询为主的应用。

多对一性能问题比较少,但是要避免经典N+1问题。
通过主键进行关联,相当于大表拆分小表。(这个是区分面向对象设计和面向过程设计的一个关键点)
list、bag、set的正确运用one-to-many:

◆使用list 需要维护Index Column字段,不能被用于双向关联,而且必须使用inverse=false,需要谨慎使用在某些稀有场合(基本上是不予考虑使用)

◆bag/set在one-to-many中语义基本相同,推荐使用bag many-to-one:

◆bag和set不同,bag允许重复插入,建议使用set在庞大的集合分页中应该使用session.createFilter session.createFilter(parent.getChildren(),""),setFirstResult(0),setMaxResult(10))避免N+1 参考(http://www.iteye.com/post/266972)
在多对一的情况下,查询child对象,当在页面上显示每个子类的父类对象的时候会导致N+1次查询,需要采用下面的方法避免:many-to-one fetch="join|select"(该方法可能有问题)

inverse=true 无法维护集合缓存(还不是很理解集合缓存和对象缓存)
OLTP类型的web应用,可以群集水平扩展,不可避免的出现数据库瓶颈框架能降低访问数据库的压力,采用缓存是衡量一个框架是否优秀的重要标准,从缓存方面看Hibernate

◆对象缓存,细颗粒度,是针对表的级别,透明化访问,因为有不改变代码的好处,所以是ORM提高性能的法宝

◆Hibernate是目前ORM框架中缓存性能最好的框架

◆查询缓存

最后Robbin还针对大家经常出现的Hibernate vs iBatis的讨论进行了一个总结:

对于OLTP应用,使用ORM框架 而OLEB应用(不确定是什么应用)最好采用JDBC或者其他方法处理Hibernate倾向于细颗粒度设计,面向对象,将大表拆分为多个小表,消除冗余字段,通过二级缓存提升性能。

iBatis倾向于粗颗粒度设计,面向关系,尽量把表合并,通过Column冗余,消除关联关系,但是iBatis没有有效的缓存手段。

可以说我们的Hibernate性能优化总结对于使用Hibernate的开发人员有着很重要的点拨作用。

以上内容转载自:http://developer.51cto.com/art/200909/154133.htm,如需转载,请注明出处
分享到:
评论
2 楼 lucky16 2012-07-09  
leon.s.kennedy 写道
博主您好
请问为什么 多对一 性能要 优于 一对多?
请问 双向的 一对多 性能如何?

其实我个人觉得这个主要就是体现在数据库的表结构中了。
如果你一对多,那个关系的建立就是在一得那一端,多的一端没新添加数据那么一得那端又得增加记录,而且每条记录数据还是相同的,就是关联ID不一样,

而要是多对一,因为你多的总是关联的是一条,所以新建一条的时候就插入一得那个ID,就可以了,很明显,数据结构也简单很多,

至于双向,我只能说不管是双向还是单向, 你的关联字段都要在多的那一端才行..
1 楼 leon.s.kennedy 2012-05-29  
博主您好
请问为什么 多对一 性能要 优于 一对多?
请问 双向的 一对多 性能如何?

相关推荐

    Hibernate性能优化研究.pdf

    ### Hibernate性能优化研究 #### 一、引言 随着企业级应用的发展,高效的数据持久化技术成为了提升系统性能的关键因素之一。Hibernate作为一种流行的面向Java环境的对象关系映射(Object-Relational Mapping,简称...

    hibernate性能优化

    珍藏的hibernate性能优化,如果对hibernate进行优化,很详细,是工作和面试的好助手

    hibernate性能优化方案

    ### Hibernate性能优化方案详解 #### 一、引言 Hibernate作为Java领域中广泛使用的对象关系映射(ORM)框架,其高效性和灵活性受到众多开发者的青睐。然而,不当的设计和配置往往会导致性能瓶颈,严重影响应用程序...

    Hibernate性能优化共9页.pdf.zip

    "Hibernate性能优化共9页.pdf.zip" 这个文件标题表明了内容专注于Hibernate框架的性能优化,暗示我们将探讨如何提升使用Hibernate进行数据库操作时的效率。通常,性能优化涉及减少延迟、提高吞吐量、降低资源消耗等...

    hibernate性能优化.doc

    Hibernate 性能优化 在 Hibernate 中,性能优化是非常重要的,因为它直接影响着应用程序的效率和可扩展性。在本文中,我们将讨论两个常见的性能优化问题:批量处理和 1+n 问题,并提供相应的解决方法。 问题 1:...

    Hibernate性能优化:一级缓存

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

    hibernate性能优化[参考].pdf

    以下是对《hibernate性能优化[参考].pdf》内容的详细解读: 1. **数据库优化**: - **物理硬件优化**:关注磁盘的IO性能,因为数据库读写频繁,磁盘的寻道能力直接影响数据访问速度。 - **MySQL配置优化**:通过...

    Hibernate 性能优化

    ### Hibernate 性能优化 #### 一、引言 Hibernate 是一款非常强大的对象关系映射(ORM)框架,它能够简化 Java 应用程序与数据库之间的交互过程。然而,对于初次接触 Hibernate 的开发者来说,可能会遇到性能方面...

    Hibernate性能优化:二级缓存

    二级缓存是Hibernate性能优化的重要手段,通过合理配置和使用,可以显著减少数据库访问,提高系统响应速度。但同时,需要注意缓存的副作用,如数据一致性、并发控制等问题。在实际应用中,需要结合业务场景和性能...

    Struts Spring Hibernate性能优化

    在进行大型项目开发时,性能优化是至关重要的,特别是对于基于SSH(Struts、Spring、Hibernate)这样的企业级框架的应用。SSH性能优化主要是针对Struts的MVC处理、Spring的依赖注入以及Hibernate的对象关系映射进行...

    Hibernate性能调优

    ### Hibernate性能调优知识...综上所述,Hibernate性能优化涉及多个层面,包括但不限于关联管理、集合类型选择、继承关系配置以及缓存策略等。合理配置这些选项能够显著提高应用程序的性能,并且减少不必要的资源消耗。

    hibernate-性能优化

    【标签】:hibernate, 性能优化 【正文】: 1. **数据库设计调整**: - **降低关联的复杂性**:减少多对多关联,避免过度嵌套的对象关系。 - **避免联合主键**:联合主键可能导致额外的性能损失,尝试使用单独的...

    Hibernate3性能优化 Hibernate_regerence3.12

    的效率低于直接JDBC存取,然而,在经过比较好的性能优化之后,Hibernate的性能还是让人相当满意的, 特别是应用二级缓存之后,甚至可以获得比较不使用缓存的JDBC更好的性能,下面介绍一些通常的 Hibernate的优化策略...

Global site tag (gtag.js) - Google Analytics