`
wei5201
  • 浏览: 185038 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

关于hibernate性能的控制

阅读更多
看了一些文章,结合自己的i些看法,得到以下几点意见:

1.除了1对1的关联之外,其他的关联设置建议根据实际情况设置延时加载.

2.session放在ThreadLoacal中去做控制,这样既节省了session来回打开,关闭的开销,又方便的跨session的事务操作,类似于事务传播

3.尽量避免使用联合主键,而去使用代理主键.

4.使用,同一个数据对象,使用2套对象模型.一个是具有全部属性的,还有1个是只存在主外键属性的.其实也可以多写hql,只是查询的时候只是查询我们需要的字段,而后封装成我们需要的对象.

5.合理使用hibernate的缓存机制.1级缓存是默认开启的,及时清除不需要的一级缓存数据:由于Hibernate默认采用一级缓存,而在 session的生命期间,所有数据抓取之后会放入一级缓存中,而当数据规模比较庞大时,抓取到内存中的数据会让内存压力非常大,一般分批操作数据,被一次操作之后将一级缓存清除,譬如
  session.clear(User.class)

6.  dynamic-insert,dynamic-update,动态插入和动态更新,指的是让Hibernate插入数据时仅插入非空数据,当修改数据时只修改变化的数据,实现如下:
<class name="User" table="users" dynamic-insert="true/false" dynamic-update="true/false" > </class>
此项 性能提升有限

7.inverse='true'的使用,一般情况下在 one-to-many 关系中,将 many 一方设为主动方( inverse=false )将有助性能的改善

8.如果要追求批量删除的性能,应该使用hibernate的batch功能,如下:session.createQuery("delete from DeleteTest dt where dt.tid > 1").executeUpdate(); 

9.修改hibernate.properties或hiberante.cfg.xml,增加了以下两句: 
  hibernate.jdbc.fetch_size=50   对查询效率明显增加
  hibernate.jdbc.batch_size=100  对批量操作效率增加
  减少操作数据库的次数
或 hiberante.cfg.xml(Oracle ,sql server 支持,mysql不支持)
<property name="hibernate.jdbc.fetch_size">50</property>
<property name="hibernate.jdbc.batch_size">30</property>

10.多使用filter过滤结果集,如下:
session.createFilter(parent.getChildren(),"").setFirstResult(0),setMaxResult(10).list();
session.createFilter(parent.getChildren(),"where this.age>25").list();

11.Hibernate Iterator方法在对内存消耗上有一定的减缓作用,常用于大数据量的处理,如下:
while(it.hasNext()){  YouObject object = (YouObject)it.next();  session.evict(youObject);  sessionFactory.evice(YouObject.class, youObject.getId());  } 


12.复杂逻辑尽量自编hql去完成查询工作,避免hibernate自操作,对于hibernate的初使用者是相当好的解决方案!

最后添加robbin对hibernate性能调优的一些建议:

1、使用双向一对多关联,不使用单向一对多
2、灵活使用单向多对一关联
3、不用一对一,用多对一取代
4、配置对象缓存,不使用集合缓存
5、一对多集合使用Bag,多对多集合使用Set
6、继承类使用显式多态
7、表字段要少,表关联不要怕多,有二级缓存撑腰



暂时这么多,下次想到再写吧!
分享到:
评论

相关推荐

    Hibernate+中文文档

    11.3. 乐观并发控制(Optimistic concurrency control) 11.3.1. 应用程序级别的版本检查(Application version checking) 11.3.2. 扩展周期的session和自动版本化 11.3.3. 脱管对象(deatched object)和自动版本化 ...

    hibernate3.2中文文档(chm格式)

    11.3. 乐观并发控制(Optimistic concurrency control) 11.3.1. 应用程序级别的版本检查(Application version checking) 11.3.2. 扩展周期的session和自动版本化 11.3.3. 脱管对象(deatched object)和自动版本化 ...

    HibernateAPI中文版.chm

    11.3. 乐观并发控制(Optimistic concurrency control) 11.3.1. 应用程序级别的版本检查(Application version checking) 11.3.2. 扩展周期的session和自动版本化 11.3.3. 脱管对象(deatched object)和自动版本化 ...

    hibernate 教程

    乐观并发控制(Optimistic concurrency control) 10.4.1. 使用长生命周期带有自动版本化的会话 10.4.2. 使用带有自动版本化的多个会话 10.4.3. 应用程序自己进行版本检查 10.5. 会话断开连接(Session...

    Hibernate实战(第2版 中文高清版)

     16.5.4 考虑性能基准   16.6 小结   第17章 JBoss Seam简介   17.1 Java EE 5.0编程模型   17.1.1 JSF详解   17.1.2 EJB 3.0详解   17.1.3 用JSF和EJB 3.0编写Web应用程序   17.1.4 分析应用程序  ...

    Hibernate中文详细学习文档

    11.3. 乐观并发控制(Optimistic concurrency control) 11.3.1. 应用程序级别的版本检查(Application version checking) 11.3.2. 扩展周期的session和自动版本化 11.3.3. 脱管对象(deatched object)和自动版本化 ...

    精通 Hibernate:Java 对象持久化技术详解(第2版).part2

     21.5 利用Hibernate的版本控制来实现乐观锁  21.5.1 使用元素  21.5.2 使用元素  21.5.3 对游离对象进行版本检查  21.5.4 强制更新版本  21.6 实现乐观锁的其他方法  21.7 小结  21.8 思考题 第22章 管理...

    Hibernate 中文 html 帮助文档

    11.3. 乐观并发控制(Optimistic concurrency control) 11.3.1. 应用程序级别的版本检查(Application version checking) 11.3.2. 扩展周期的session和自动版本化 11.3.3. 脱管对象(deatched object)和自动版本化 ...

    最全Hibernate 参考文档

    11.3. 乐观并发控制(Optimistic concurrency control) 11.3.1. 应用程序级别的版本检查(Application version checking) 11.3.2. 长生命周期session和自动版本化 11.3.3. 脱管对象(deatched object)和自动版本化 ...

    Hibernate教程

    12.3. 乐观并发控制(Optimistic concurrency control) 12.3.1. 应用程序级别的版本检查(Application version checking) 12.3.2. 长生命周期session和自动版本化 12.3.3. 脱管对象(deatched object)和自动版本化 ...

    hibernate 体系结构与配置 参考文档(html)

    乐观并发控制(Optimistic concurrency control) 11.3.1. 应用程序级别的版本检查(Application version checking) 11.3.2. 扩展周期的session和自动版本化 11.3.3. 脱管对象(deatched object)和自动版本化 ...

    Hibernate_3.2.0_符合Java习惯的关系数据库持久化

    11.3. 乐观并发控制(Optimistic concurrency control) 11.3.1. 应用程序级别的版本检查(Application version checking) 11.3.2. 扩展周期的session和自动版本化 11.3.3. 脱管对象(deatched object)和自动版本化 ...

    最新JAVA通用后台管理系统(ExtJS 4.2+Hibernate 4.1.7+Spring MVC 3.2.8)Eclipse版本

    3、分别封装了模型层、控制层、业务逻辑层和数据持久层的通用操作模块,层次分明,大大减少代码冗余,二次开发效率高。 4、系统是公司多个项目的基础框架,稳定性好,支持大并发。 二、主要功能 1、采用ExtJS 4.2...

    hibernate

    乐观并发控制(Optimistic concurrency control) 10.4.1. 使用长生命周期带有自动版本化的会话 10.4.2. 使用带有自动版本化的多个会话 10.4.3. 应用程序自己进行版本检查 10.5. 会话断开连接(Session...

    hibernate与ibatis比较的11大优势

    Hibernate在解决性能问题方面做得非常好。...但这些还不够,hibernate给了开发者足够的自由,让开发者自己去控制性能问题。 学习了一段时间的ibatis,我觉得hibernate有着ibatis无法替代的优势。

    hibernate3.04中文文档.chm

    12.3. 乐观并发控制(Optimistic concurrency control) 12.3.1. 应用程序级别的版本检查(Application version checking) 12.3.2. 长生命周期session和自动版本化 12.3.3. 脱管对象(deatched object)和自动版本化 ...

    SpringMVC、Mybatis、Hibernate、Bootstrap、jQuery、HTML5、SpringSecurity、Lucene、Ehcache

    后端主要技术:Spring 4.1.5(管理事务)、Spring MVC 4.1.5(作为控制层)、Spring Security 4.0.0(认证和授权,权限管理)、Hibernate 4.3.8(作为数据持久层)、MyBatis 3.2.8(作为数据持久层)、Hibernate Search 5.1.0...

    Hibernate3+中文参考文档

    11.3. 乐观并发控制(Optimistic concurrency control) 11.3.1. 应用程序级别的版本检查(Application version checking) 11.3.2. 长生命周期session和自动版本化 11.3.3. 脱管对象(deatched object)和自动版本化 ...

    Struts+Spring+Hibernate电子政务网站系统

    基于Struts+Spring+Hibernate[SQL]的完美结合,高效的页面执行效率,更高的安全性能。 【简要说明】:系统自身具有强大、完善的网站后台管理功能,可以为每个科局(科室\部门)设定不同的管理权限,动态增删改栏目,...

Global site tag (gtag.js) - Google Analytics