快速业务通道

加速你的Hibernate引擎(下) - 编程入门网

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-22
则不要使用“transactional”策略,因为JTA需要漫长的两阶段提交处理,这导致它基本是性能最差的策略。

如果你的数据读很多或者很少有并发缓存访问和更新,那么可以使用“nonstrict-read-write”策略。感谢它的轻量级“拉”更新策略,它通常是性能第二好的策略。

如果你的数据是又读又写的,那么使用“read-write”策略。这通常是性能倒数第二的策略,因为它要求有缓存锁,缓存集群中使用重量级的“推”更新策略。

加速你的Hibernate引擎(下)(5)

时间:2010-12-30 infoq 译:丁雪丰

范例9

以下是一个ISO收费类型的HBM文件片段:

<class name="IsoChargeType">     <property name="isoId" column="ISO_ID" not-null="true"/>     <many-to-one name="estimateMethod" fetch="join" lazy="false"/>     <many-to-one name="allocationMethod" fetch="join" lazy="false"/>     <many-to-one name="chargeTypeCategory" fetch="join" lazy="false"/> </class>

一些用户只需要ISO收费类型本身;一些用户既需要ISO收费类型,还需要它的三个关联对象。简单起见,开发者会立即加载所有三个关联对象。如果项目中没人负责Hibernate调优,这是很常见的。

4.7.1节中讲过了最好的方法。因为所有的关联对象都是只读引用数据,另一种方法是使用延迟抓取,打开这些对象的二级缓存以避免N+1问题。实际上前一种方法也能从引用数据缓存中获益。

因为大多数项目都有很多被其他数据引用的只读引用数据,上述两种方法都能改善全局系统性能。

4.8.2 RegionFactory

下表是新老两种方法中对应的主要类/接口:

新方法 老方法
RegionFactory CacheProvider
Region Cache
EntityRegionAccessStrategy CacheConcurrencyStrategy
CollectionRegionAccessStrategy CacheConcurrencyStrategy

如果你的HQL或Criteria会返回很多数据,那么要注意两件事:

hibernate.jdbc.fetch_size 10

fetch_size设置为正值将开启JDBC批量抓取特性。相对快速网络,在慢速网络中这一点更为重要。Oracle建议的经验值是10。你应该基于自己的环境进行测试。

用下列配置开启批量抓取特性:

在使用上述任一方法时都要关闭缓存,因为批量加载一般是一次性任务。受限于内存容量,向缓存中加载大量数据通常也意味着它们很快会被清除出去,这会增加GC开销。

范例10

我们有一个后台任务,分段加载大量的IsoDeal数据用于后续处理。我们还会在分段数据交给下游系统处理前将其更新为处理中状态。最大的一段有50万行数据。以下是原始代码中截取出来的一段:

Query query = session.createQuery("FROM IsoDeal d WHERE chunk-clause"); query.setLockMode("d", LockMode.UPGRADE); //for Inprocess status update  List<IsoDeal> isoDeals = query.list(); for (IsoDeal isoDeal : isoDeals) { //update status to Inprocess      isoDeal.setStatus("Inprocess"); }  return isoDeals; 

包含上述代码的方法加上了Spring 2.5声明式事务的注解。加载并更新50万行数据大约花了10

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号