首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 软件管理 > 软件架构设计 >

Hibernate性能优化计策

2012-09-10 
Hibernate性能优化策略1)缓存机制a)基本缓存——Session缓存(一级缓存)Session中保存了一个Map(id--PO)PO(

Hibernate性能优化策略
1)缓存机制
a)基本缓存——Session缓存(一级缓存)
Session中保存了一个Map(id-->PO)
PO(持久化对象)
b)二级缓存(全局缓存)——SessionFactory
1、过度使用的问题:内存会被过度占用,
会导致系统性能急剧下降。
2、使用条件:
i)缓存的数据比较稳定(变动不频繁)(如 部门)
ii)缓存的数据使用比较频繁(缓存的命中率)
c)启用二级缓存
在“hibernate.cfg.xml”的<session-factory>中加入属性——
<property name="hibernate.cache.provider_class">
org.hibernate.cache.OSCacheProvider
</property>
d)使用二级缓存
缓存方式:read-only;read-write
两个级别——类级别和集合级别
使用语法:在<class>或<set>(集合)里面加入——
<cache usage="read-only | read-write" />

1)read-only (只读)
一般包括系统参数
<class name="SystemParameter" table="t_syspara" mutable="false">
<cache usage="read-only"/>
<id name="id" type="integer" column="id">
<generator />
</id>
</class>

2)read-write (可写)
<class name="Dept" table="t_dept">
        <cache usage="read-write" />
       
        <set name="emps">
        <cache usage="read-write" />
        ...
        </set>
    </class>

2)延缓加载
a、在绝大多数情况下是很有用的
如 order(items)
b、取消延缓加载的方法
i)<class  ...  lazy="false" />
ii)关联映射中,关联的地方用“fetch="join"”
<many-to-one name="dept" column="dept_id" fetch="join"/>


3)批量抓取
"batch-size=10"
用在<class>或<set>(集合)
a、class
用Emp来抓取Dept
<class name="Dept" batch-size="10" >

b、set
用Order来抓取Items
<class name="Order"...>
...
<set ... batch-size="3">
</set>
</class>

热点排行