`
yueguangyuan
  • 浏览: 337787 次
  • 性别: Icon_minigender_1
  • 来自: 新加坡
社区版块
存档分类
最新评论

JavaEye活动记实 Gavin King见面会以及Robbin Hibernate性能调优

阅读更多

4月19日,如期赶到交大参加GavinKing的见面会,上次参加JavaEye的活动还只是在视频上看到Gavin,当时他语速很快,而且有些含混的地方,不知道这次面对面会是个啥样子。
JavaEye还是真厉害,给我们提供这样的机会与Hibernate之父见面,羡煞旁人哦,呵呵。

活动分4个部分:Gavin的演讲、Robbin的Hibernate性能调优、曹晓钢有关JBoss Seam的介绍、Gavin King答疑

一、Gavin演讲

      本来我是用手机录的视频并想拿回来给大家分享的,但是没想到手机突然没电,而录的30分钟视频完全丢失,真是无比郁闷的!
     Gavin说话比较快,而且偶尔也会说的很模糊,对于听力不怎么灵光的我来说实在是有难度。所以仅仅是听懂了大体的意思。
     Gavin打开Hibernate官方网站www.hibernate.org然后逐一演示几个关键的开源软件:hibernate core,hibernate annotations,hibernate entity manager等等。感觉介绍都是比较大略的(主要是我能听懂的也不多),介绍hibernate的时候讲到Hibernate和JPA的使用,但是 JPA我没使用过,他说今后使用Hibernate的时候可以更多的使用JPA而不用使用Hibernate;讲到Hibernate Annotations的时候问大家配置Hiberante是使用schema还是annotations,看到使用Annotations用的少的时 候,说建议大家尝试使用,但是这个目前为止并没有被大家所认可,所以是否使用还有待观察哦;接下来讲的entitymanager、shard、 validator、search、tools我都没有使用过,听了他的介绍以后也只是简单了解一下,是否使用就要看以后有没有相应的需求了。有趣的是 Gavin还提到了Spring,说大家使用Spring+hibernate的时候都会遇到延迟加载的问题吧,但是大家都没怎么听懂,后来robbin 在下面现场翻译了一下,才多了几个人举手,Gavin说应该会有很多人碰到的,而EJB3不会碰到,呵呵。

     其实Gavin此次来中国主要是为Radhat推广JBoss Seam,在北京说他讲了一天时间,因为那次是商业活动,而到了上海是JavaEye的社区活动,加上他刚刚出了一次小车祸,所以在上海只讲了一个小时,其中有20分钟是介绍JBossSeam的,同样令我摸不到头脑。介绍JBoss Seam,Gavin很有信心,而且好像很努力的在讨好SUN,希望能加入JEE标准中,因为他相信在EJB2时代不被看好的Hibernate已经上 位,而Seam也可能走这条路。接下来进行了介绍,还讲解官方网站上的Demo,但是由于网络延迟太严重,他还在演讲台上做了一个原地的跳动来模仿鼠标等 待的样子,相当的搞笑。接下来的回答问题环节,一位同学提到了ROR,说Hibernate是如何来应对Convention over configuration的挑战呢?结果引起Gavin的剧烈反应,Gavin显示出对ROR的不削,而且还说EJB在几年以前就有COC的理念了, ROR还嫩的很,随即还即兴写了一小段代码来掩饰EJB3中如何使用annotations来实现COC,他的回应赢得满场的掌声。整个演讲持续一个多小 时,而我还损失了30分钟的真人视频 :(。Robbin说Gavin受了两年的成名的考验以后,显然比原来更适应大场面,演讲声音很大,吐字也清晰了许多,自信心也很足,经常做一些很古怪的 表情,还时不时的做出经典的兔子手势来表达他的意思。可以说他的演讲还是很值得一听的。

      但是总体想起来,Gavin貌似已经走进一个漩涡,那么就是标准。估计在整个下午(演讲1个小时和对几个人的回答)估计他说了10次“Standard”这个词,在他眼里标准已经占据了一切,有人问,使用Hibernate和JPA,你有什么看法?他会说我不在意,他们都是标准。一切尽在标准中,他无视Spring、ROR的强有力挑战,甚至想将JBoss Seam这样的东西纳入JSF、EJB阵营。他如此走下去真是难以让人对他重现Hibernate的惊世之作有更多的期待。

二、Robbin倾力奉送Hibernate性能调优

     个人认为这个绝对是Robbin压箱底的作品(因为很激动能邀请到Gavin参加他主办的活动),但是Robbin还是很谦虚的首先声明:在Gavin面前谈Hibernate真是班门弄斧,所以是拿出来和大家探讨,而当晚就有针对其演讲中如何避免N+1问题的讨论(http://www.iteye.com/post/266972),足见Robbin演讲受欢迎的程度。

     由于Robbin为了抢时间,所以他讲的比较快,我也是急急忙忙的记笔记,但是他所总结的东西已经让我了解到了很多东西,原来我对Hibernate的了解还是那么少:(。

Robbin总结的Hibernate性能优化要点:

1.尽量使用many-to-one,避免使用单项one-to-many
2.灵活使用单向one-to-many
3.不用一对一,使用多对一代替一对一
4.配置对象缓存,不使用集合缓存
5.一对多使用Bag 多对一使用Set
6.继承使用显示多态  HQL:from object  polymorphism="exlicit" 避免查处所有对象
7.消除大表,使用二级缓存
    对于上面这些,Robbin进行了详细的讲解。
one-to-many:
     使用inverse=false(default),对象的关联关系是由parent对象来维护的
     而inverse=true的情况下,一般用户双向多对多关联,由子对象维护关联关系,增加子对象的时候需要显示:child.setParent(child)
     为了提高性能,应该尽量使用双向one-to-many inverse=true,在MVC结构中的DAO接口中应该直接用Session持久化对象,避免通过关联关系(这句话有点不理解),而在单项关系中正确使用二级缓存,则可以大幅提高以查询为主的应用。
     多对一性能问题比较少,但是要避免经典N+1问题。
     通过主键进行关联,相当于大表拆分小表。(这个是区分面向对象设计和面向过程设计的一个关键点)
list、bag、set的正确运用
     one-to-many:
     A、使用list 需要维护Index Column字段,不能被用于双向关联,而且必须使用inverse=false,需要谨慎使用在某些稀有场合(基本上是不予考虑使用)
     B、bag/set在one-to-many中语义基本相同,推荐使用bag
     many-to-one:
     A、bag和set不同,bag允许重复插入,建议使用set
在庞大的集合分页中应该使用session.createFilter
    session.createFilter(parent.getChildren(),""),setFirstResult(0),setMaxResult(10))
避免N+1 参考(http://www.iteye.com/post/266972)
    在多对一的情况下,查询child对象,当在页面上显示每个子类的父类对象的时候会导致N+1次查询,需要采用下面的方法避免:many-to-one fetch="join|select"(该方法可能有问题)
inverse=true 无法维护集合缓存(还不是很理解集合缓存和对象缓存)
OLTP类型的web应用,可以群集水平扩展,不可避免的出现数据库瓶颈
    框架能降低访问数据库的压力,采用缓存是衡量一个框架是否优秀的重要标准,从缓存方面看Hibernate
    A、对象缓存,细颗粒度,是针对表的级别,透明化访问,因为有不改变代码的好处,所以是ORM提高性能的法宝
    B、Hibernate是目前ORM框架中缓存性能最好的框架
    C、查询缓存
最后Robbin还针对大家经常出现的Hibernate vs iBatis的讨论进行了一个总结:
   对于OLTP应用,使用ORM框架 而OLEB应用(不确定是什么应用)最好采用JDBC或者其他方法处理
   Hibernate倾向于细颗粒度设计,面向对象,将大表拆分为多个小表,消除冗余字段,通过二级缓存提升性能。
  iBatis倾向于粗颗粒度设计,面向关系,尽量把表合并,通过Column冗余,消除关联关系,但是iBatis没有有效的缓存手段。

   可以说Robbin的性能总结对于使用Hibernate的开发人员有着很重要的点拨作用。非常感谢他无私奉献自己的经验。

三、曹晓刚对于JBoss Seam的介绍

     曹大侠又一次露面了,首先的感觉就是他比上次JavaEye的活动瘦了些,更帅了 :)。而且在演讲席间,是他一直与Gavin进行着交流,这位满江红的创办者之一,想必他的英语水平和他的技术水平一样的强。他说目前满江红正在进行JBoss Seam文档的中文翻译工作,进度为50%。而此次演讲的内容是介绍JBoss Seam,但是由于JBossSeam刚刚走向市场推广,国内也鲜有应用,其实全球来讲也没有什么大规模的成功案例,所以他的演讲也使得大家有点陌生。而且他说自己也是在学习阶段,呵呵。感觉上这次介绍不如上次JavaEye活动中他给我们带来的基于Ajax开源报表项目有吸引力,但是也具备一定的价值。

     通过Gavin和曹晓刚的介绍,JBoss有啥好处我并不大了解,以及它是否具有挑战主流架构模式都有待检验,但是我得到一些简单的结论:JBoss Seam现阶段我们还不需要花时间去了解。

     原因有一下几点,实际上就是曹晓刚介绍的东西:

     1.JBoss Seam引入了一个全新的概念:declared state,就是在传统的HTTP存储对象的组件外又加入了Conversation这个东西。(这里记录好像有错误,因为我对JBoss Seam一无所知)
     2.JBoss Seam目前只支持JSF,可能是JBoss团队以Gavin为首想讨好SUN和众多大厂商吧,居然紧密结合JSF,JSF多年来日子都没好过过,不知道Seam这样搞是为了啥。
     3.JBoss Seam添加了众多组件的支持,比如Ajax支持、Captcha支持、类似于Rails的Gen支持。说50行就可以完成一个什么实现的。
     4.BiInjection(双向注入依赖,一个Seam的创新,也值得质疑的东西) and contextual are the soul of Seam,这是一个Seam的开发者对Seam的总结,但是这两个东西都难有说服力,不知道什么样的场景需要大量使用到他们,特别是双向关联,可能会造成相当大的迷惑哦。

一个非常精彩的技术之旅,感谢JavaEye提供这样的好机会,也感谢Gavin精彩的演讲 :P。

分享到:
评论
2 楼 shaka 2009-02-13  
很受启发,顶了
1 楼 strive4l 2007-09-26  
谢谢小月的总结和分享...

相关推荐

    javaeye Robbin 论缓存技术

    在Javaeye Robbin的讨论中,他提到了缓存技术在多种场景下的应用和重要性。 **缓存的作用** 1. **高速缓冲存储**:缓存是一种位于主存储器和慢速I/O设备之间的高速存储器,其目的是减少对慢速设备的访问次数,提高...

    java hibernate c3p0

    7. **性能调优**:分享C3P0的性能优化技巧,如调整连接池大小、设置合适的测试查询以确保连接有效性等。 8. **实战应用**:通过实际案例,演示如何在项目中集成C3P0和Hibernate,包括Maven或Gradle的依赖管理、配置...

    Ext+Spring+Hibernate(原创送给javaeye朋友)

    标题 "Ext+Spring+Hibernate(原创送给javaeye朋友)" 暗示了这是一个关于整合Java技术栈的教程或示例项目,其中涉及了三个关键组件:Ext(ExtJS)、Spring和Hibernate。这些技术在企业级Java开发中广泛使用,分别用于...

    Struts+spring+hibernate学习笔记! - Struts原理与实践 - JavaEye知识库.files

    Struts、Spring 和 Hibernate 是Java开发中非常著名的三个开源框架,它们在企业级应用开发中起着关键作用。Struts 是一个 MVC(Model-View-Controller)架构的 Web 框架,Spring 提供了一个全面的后端服务管理平台,...

    javaeye热点阅读

    JavaEye热点阅读是JavaEye论坛推出的2009年2月特辑,旨在为Java学习者和开发者提供最新的知识及行业动态。这份资料包含了多个Java相关的主题,包括但不限于并发编程、开源项目、设计模式、框架应用以及软件开发实践...

    javaeye被黑

    javaeye被黑 大家看看

    hibernate BASEDAO

    在Java的持久化框架Hibernate中,BaseDAO(Base Data Access Object)是一种常见的设计模式,用于封装数据库操作,提供一套标准的方法来实现CRUD(Create、Read、Update、Delete)操作。这种模式使得业务层可以更加...

    JavaEye博文JavaEye博文JavaEye博文

    "JavaEye博文" 本资源摘要信息来自JavaEye博文,作者cutesunshineriver,发布于2010年。该博文涵盖了软件开发、编程、项目管理等多方面的知识点。 在本博文中,我们可以看到多个与软件开发相关的知识点,包括: 1...

    hibernate的中文问题的解决方案

    ### Hibernate中文问题解决方案 在开发基于Java的应用程序时,Hibernate作为一个强大的对象关系映射(ORM)框架被广泛采用。然而,在处理中文字符时,开发者可能会遇到各种各样的问题,如乱码显示等。本文将详细...

    JavaEye+技术架构

    JavaEye+技术架构是针对Java开发领域的一种综合技术框架,旨在提高开发效率,优化系统性能,以及提升软件的可维护性和扩展性。该框架可能包含了多个层次和组件,以满足现代企业级应用的需求。以下是对JavaEye+技术...

    hibernate。hbm.xml配置详解

    Hibernate 是一个流行的 Java 平台上的对象关系映射(ORM)框架,它允许开发者使用面向对象的方式来操作数据库。在 Hibernate 中,`hbm.xml` 文件是用于定义对象与数据库表之间映射的元数据文件。这篇文档将深入解析...

    JavaEye新闻月刊_-_2009年3月_-_总第13期

    JavaEye新闻月刊2009年3月第13期内容涉及了当时软件开发领域内的一系列重要话题,包括IBM拟收购Sun Microsystems公司的新闻报道、Java社区对此的看法以及各种编程语言、开发工具和技术的新动态。 首先,新闻月刊...

    javaeye的信息提示框代码之js

    javaeye的信息提示框代码之css,application.js

    javaeye月刊2008年4月 总第2期.pdf

    【JavaEye月刊2008年4月总第2期】主要涵盖了多个与Java相关的技术和行业动态。以下是对这些内容的详细解析: 1. **Spring创始人Rod Johnson再次发飙—“传统Java应用服务器正在没落”** Rod Johnson是Spring框架的...

    JavaEye3.0开发手记

    ### JavaEye3.0开发手记之开发环境搭建详解 #### 一、开发环境搭建概述 随着JavaEye3.0开发计划的启动,本篇文章将详细介绍如何为该项目搭建高效的开发环境。开发过程中不仅需要考虑软件的选择,还需要针对操作...

Global site tag (gtag.js) - Google Analytics