Hibernate程序性能优化的考虑要点[Java编程]
本文“Hibernate程序性能优化的考虑要点[Java编程]”是由七道奇为您精心收集,来源于网络转载,文章版权归文章作者所有,本站不对其观点以及内容做任何评价,请读者自行判断,以下是其具体内容:
本文按照HIBERNATE帮忙文档,一些网络书籍及项目经验整理而成,只供应要点和思绪,具体做法可以留言探究,或是找一些更具体更有针对性的资料.
初用HIBERNATE的人大概都碰到过性能问题,实现同一功效,用HIBERNATE与用JDBC性能相差十几倍很正常,假如不赶早调整,极大概影响整个项目的进度.
大体上,关于HIBERNATE性能调优的主要考虑点以下:
数据库计划调整
HQL优化
API的精确利用(如按照差别的业务范例选用差别的调集及查询API)
主配置参数(日记,查询缓存,fetch_size, batch_size等)
映射文件优化(ID生成战略,二级缓存,耽误加载,关联优化)
一级缓存的管理
针对二级缓存,还有很多特有的战略
事件掌握战略.
1、数据库计划
a) 降低关联的复杂性
b) 尽大概不利用结合主键
c) ID的生成机制,差别的数据库所供应的机制并不完好一样
d) 得当的冗余数据,不过度追求高范式
2、HQL优化
HQL假如抛开它同HIBERNATE本身一些缓存机制的关联,HQL的优化本领同普通的SQL优化本领一样,可以很简单在网上找到一些经验之谈.
3、主配置
a) 查询缓存,同下面讲的缓存不太一样,它是针对HQL语句的缓存,即完好一样的语句再次履行时可以操纵缓存数据.但是,查询缓存在一个交易系统(数据变更频繁,查询条件相同的机率并不大)中大概会起反作用:它会白白耗费大量的系统资源但却难以派上用场.
b) fetch_size,同JDBC的相关参数作用近似,参数并非越大越好,而应按照业务特点去设置
c) batch_size同上.
d) 生产系统中,牢记要关掉SQL语句打印.
4、缓存
a) 数据库级缓存:这级缓存是最高效和安全的,但差别的数据库可管理的层次并不一样,比方,在ORACLE中,可以在建表时指定将整个表置于缓存当中.
b) SESSION缓存:在一个HIBERNATE SESSION有效,这级缓存的可干涉性不强,大多于HIBERNATE自动管理,但它供应排除缓存的办法,这在大批量增添/更新操作是有效的.比方,同时增添十万条记录,按通例方法举行,极大概会发现OutofMemeroy的非常,这时大概需求手动排除这一级缓存:Session.evict以及Session.clear
c) 利用缓存:在一个SESSIONFACTORY中有效,因此也是优化的重中之重,因此,各类战略也考虑的较多,在将数据放入这一级缓存之前,需求考虑一些前提条件:
i. 数据不会被第三方改正(比方,能否有另一个利用也在改正这些数据?)
ii. 数据不会太大
iii. 数据不会频繁更新(不然利用CACHE大概适得其反)
iv. 数据会被频繁查询
v. 数据不是关键数据(如触及钱,安全等方面的问题).
缓存有几种情势,可以在映射文件中配置:read-only(只读,实用于很少变更的静态数据/历史数据),nonstrict-read-write,read-write(对比广泛的情势,效率普通),transactional(JTA中,且支持的缓存产品较少)
d) 分布式缓存:同c)的配置一样,只是缓存产品的选用差别,在目前的HIBERNATE中可供挑选的不多,oscache, jboss cache,目前的大大都项目,对它们的用于集群的利用(分外是关键交易系统)都持保守态度.在集群环境中,只操纵数据库级的缓存是最安全的.
以上是“Hibernate程序性能优化的考虑要点[Java编程]”的内容,如果你对以上该文章内容感兴趣,你可以看看七道奇为您推荐以下文章:
本文地址: | 与您的QQ/BBS好友分享! |