动态网站制作指南 [  QQ表情  ]
[ 投票调查 ]
[ 企业邮箱 ]
[ 网站空间 ]
网络编程 | 站长之家 | 网页制作 | 图形图象 | 操作系统 | 冲浪宝典 | 软件教学 | 网络办公 | 邮件系统 | 网络安全 | 认证考试 | 系统进程
ASP源码 | .Net源码 | PHP源码 | JSP源码 | JAVA源码 | CGI源码 | VB源码 | C++源码 | Delphi源码 | PB源码 | VF源码 | 汇编 | 服务器
Firefox | IE | Maxthon | 迅雷 | 电驴 | BitComet | FlashGet | QQ | QQ空间 | Vista | 输入法 | Ghost | Word | Excel | wps | Powerpoint
asp | .net | php | jsp | Sql | c# | Ajax | xml | Dreamweaver | FrontPages | Javascript | css | photoshop | fireworks | Flash | Cad | Discuz!
当前位置 > 网站建设学院 > 网络编程 > Java教程
Tag:注入,存储过程,分页,安全,优化,xmlhttp,fso,jmail,application,session,防盗链,stream,无组件,组件,md5,乱码,缓存,加密,验证码,算法,cookies,ubb,正则表达式,水印,索引,日志,压缩,base64,url重写,上传,控件,Web.config,JDBC,函数,内存,PDF,迁移,结构,破解,编译,配置,进程,分词,IIS,Apache,Tomcat,phpmyadmin,Gzip,触发器,socket
网络编程:ASP教程,ASP.NET教程,PHP教程,JSP教程,C#教程,数据库,XML教程,Ajax,Java,Perl,Shell,VB教程,Delphi,C/C++教程,软件工程,J2EE/J2ME,移动开发
文章搜索服务
邮件订阅
输入你的邮件地址,
你将不会错过任何关于:
[ Java教程 ]的信息

本月文章推荐
.Java应用性能的提升.
.JAVA网络编程基础.
.重用java.util.Observable类.
.介绍final.
.使用的DES对称加密.
.用JPDA轻松调试Java代码.
.通过实例论证J2ME的事件传输机制.
.JUnit入门.
.Java10年回顾:世界各地开发高手谈.
.J2EE应用部署(一):基础篇.
.java中按字节截取String字符串..
.delete 运算符.
.Java新消息:JRuby将集Java和RoR.
.Borland推出专供Java使用之Web S.
.AvailableSpace 属性.
.java自动在中关村二手市场发布信.
.Java对象池技术的原理及其实现.
.使用 EJB 组件你需要了解些什么呢.
.Jbuilder5下调试得到主机ip的全过.
.Java技巧:Java向Web站点发送POS.

了解Hibernate的FlushMode.NEVER

发表日期:2008-1-5 |


  一、案件背景:

  了解Hibernate的FlushMode.NEVER(图一)

  图片来自于电影《天生杀人狂》

  Hibernate并没有为巨型数据集合提供良好的帮助,这也许是开发者认为这样没有太大必要,反而增加Hibernate框架复杂性的缘故吧。于是“极大数据量==批量处理”、“Hibernate/Java不是批处理的最佳场所”的观念在Hibernate开发中大行其道,有些开发者甚至直接利用Hibernate建立session,获取其connection进而进行jdbc操作。Jdbc并不是古董,但在Hibernate中再次call它,难免有些令人无奈。最近在Hibernate的官方坛子上看到Gavin写给初级用户的“understand FlushMode.NEVER”,并参考了一下Stripes项目(本人时常关注的时髦项目)作者Tim的blog。在阅读两位大家言论后,和大家share一下。

  二、性能杀手何在?

  了解Hibernate的FlushMode.NEVER(图二)

  图片来自于电影《这个杀手不太冷》

  Tim在其Blog写道:“我目前的DNA重组系统,具有复杂而海量的OLTP数据,对付这些在内存的复杂对象(数千个)的方式是依靠用户接口(非批量处理)来实现用例驱动。”这句半开玩笑的话,是我想起了那男耕女织的生产力低下的生活,真的让每个开发者都使用算盘运算吗?

  session.setFlushMode(FlushMode.NEVER);

  这条语句及其简单,但解决了大问题。它告知Hibernate session无论何时也不要flush任何的状态变化到数据库,除非开发者直接调用session.flush()。听上去很合乎逻辑,但它为何在一些场景中对性能影响甚深,而在其他的场景中却好似轻如鹅毛般?

  在Tim的项目中存在着一个十分典型的case(我也不大了解生物,这不能怪我):在实验中利用PCR Primers对遗传基因(genes)和DNA中的核苷酸序列(exons),这里的PCR Primers是在PCR处理过程中用于检测DNA片段的物质,对不起大家,本人对生物学词汇实在无能为力。检测匹配过程大致分为以下7步:

  1.发现本次实验中所有exons(个数在5000个以上);

  2.查询本次实验所有已经排序的PCR Primers;

  3.查询本次实验所有待排序的PCR Primers;

  4.得到与exons对应的Primers找出那些无需转换的部分;

  5.在系统中为无需转换的区域查询所有可能的PCR Primers;

  6.测试每个primer找出最佳exons匹配者(Primer);

  7.保存找出的Primer。

  不用担心,步骤细节不大明白也不会影响后面的理解。

  由于domain model极其海量,在第4步我们可能在一个session中排序20000-30000个对象。而在5、6步的查询将带来0-20个附加对象。有趣之处在于当执行第7步将对象save到数据库时,没有一个前面装载的对象被修改过。整个实验的目的就是仅仅获得这0-20个对象。

  在回顾了Tim的生物学场景之后,让我们重新回到FlushMode.NEVER的讨论上来吧。你可能认为既然直到最后一步都没有修改或是持久化任何东西,那么改变flush模式将收效甚微。当然这是不正确的未参透实质的理解。实际上,在上面流程的起始设置Never这个flush模式、在流程终点手动flush将节省一半的run time,请注重这里仅提到了run time而没有将内存、IO计算在内。

  三、这个杀手不太“冷”

  了解Hibernate的FlushMode.NEVER(图三)

  图片来自于电影《黑衣人》

  幸好,这个杀手不太“冷”!这都归结于Hibernate的脏检查(dirty checking)。每次装载一个对象到内存(不能去evict它)时,session始终跟踪它的修改。于是每次对数据的查询,session都将跌代所有的session中的对象并检查脏数据,将脏数据flush到数据库。Hibernate这样做的良苦专心是为了确保在执行查询之前所有可能影响查询的变化都被提交到数据库。这对零星数据量的应用来讲,不足为言。但面对数千个对象和千余次的查询来讲,它将使性能的真正杀手。

  了解真相后,我们可以使用session.setFlushMode(FlushMode.NEVER)语句将在查询时不需脏检查的数据(生物实验中的Primers)标识脏数据,这样Hibernate无处不在的代理机制将被“欺骗”,直接将它添加到脏数据列表(列表中的数据不会被flush到数据库)中,这样“杀手”就会因无处遁形而自动消失了。

  四、打造制胜武器:

  了解Hibernate的FlushMode.NEVER(图四)


上一篇:别让Hibernate偷走了你的标识符 人气:450
下一篇:Good Java Style: Part 2 人气:490
浏览全部Java的内容 Dreamweaver插件下载 常用网页广告代码全集
  最新网站源码 最新软件下载
2008-10-10 企业网站智能管理系统(TZIMS) v6
2008-10-10 拓文asp.net网站内容管理系统 v6
2008-10-10 动网论坛PHP版 v2.0++ Build 081
2008-10-10 免费时代CMS v5.0
2008-10-10 wodig第四季中文DIGG社区 v4.1 b
2008-10-10 老Y文章管理系统 v2.2 bulid 081
2008-10-10 魔法盒动感相册 ASP+SQL版 v2.0
2008-10-10 Asoft签到管理系统 v3.0 Pack1
2008-10-10 哥特人音乐网潮流留言本 v1.1
2008-10-11 联系人分组工具 v1.1 中文破解版
2008-10-11 FaceMelter变脸 v2.0 汉化破解版
2008-10-11 PathTracker道路跟踪仪 v1.2 破解
2008-10-11 Rooms手机聊天室 v0.6.7 破解版
2008-10-11 RemoteDesktop远程桌面 v1.0 破解
2008-10-11 ProRemote远程调音台 v1.0.1 破解
2008-10-11 PicShare照片共享 v1.0.0 破解版
2008-10-11 Photogene照片编辑器 v1.5 汉化破
2008-10-11 WriteRoom共享文档 v1.0 破解版
  发表评论
姓 名: 验证码:
内 容:
站长工具:网站收录查询 | Google PR查询 | ALEXA排名查询 | CSS在线编辑器 | 广告代码 | js/vbs加密 | md5加密 | 进制转换 | UTF-8 转换工具 | Html转换js | Html转换asp | Html转换php | Html转换perl
实用工具:汉字翻译拼音 | 拼音字典 | 符号对照表 | 个税计算 | 实时汇率查询换算 | 经典小工具 | 汉字简繁转换 | 普通单位换算 | 公制单位换算 | 生辰老黄历 | 国内电话区号 | 国家代码与域名缩写 | 文字加密解密 | 健康查询 | 万年历 | 汉字横竖排版 | 手机号码查询 | 计算器 | ip搜索
业务联系 | 广告刊登 | 频道合作 | 投稿荐稿 | 联系方式 | 加入收藏 | RSS订阅
Copyright © 2000-2008 www.knowsky.com All rights reserved | 网络实名:动态网站制作指南 | 沪ICP备05001343号
ホームページ制作 不動産検索システム 求人情報
防水工事·改修工事 フットサル大会 探偵
SEO対策 中国語教室 ホームページ作成