论坛首页 Java企业应用论坛

为何每次问到传统sql如何调优就没人回答?另附几则hibernate性能优化实践

浏览 59344 次
该帖已经被评为良好帖
作者 正文
   发表时间:2010-03-24   最后修改:2010-03-24
jmu 写道
gdpglc 写道
jmu 写道

  首先hibernate不是写了什么native方法,和厂商合作推出的独立产品,他是基于jdbc api的封装,所以一般来说大多数情况使用hibernate都会比jdbc慢

不知你说慢的原因是什么? 慢多少,能不能量化一下?

可能我没说清楚 这个慢是指向数据库发起查询到返回结果集的单个过程,  详细原因你肯定比我了解的多啊    hibernate已经做了很多优化,但都是针对hibernate容器的,  慢多少我不知道, 


呵呵...我是真不了解大家说hibernate慢的原因,所以才问。当然,我了解一些慢的因素,但是我知道的那些,对软件本身的快慢都不会造成明显的影响,更多是理论上的,比如把hql翻译成sql肯定是要花时间的。所以希望这里有人能把所有变慢的因素列出来。
0 请登录后投票
   发表时间:2010-03-24  
jmu 写道
gdpglc 写道
jmu 写道

  首先hibernate不是写了什么native方法,和厂商合作推出的独立产品,他是基于jdbc api的封装,所以一般来说大多数情况使用hibernate都会比jdbc慢

不知你说慢的原因是什么? 慢多少,能不能量化一下?

可能我没说清楚 这个慢是指向数据库发起查询到返回结果集的单个过程,  详细原因你肯定比我了解的多啊    hibernate已经做了很多优化,但都是针对hibernate容器的,  慢多少我不知道, 

这种说法很不严谨啊。
不是基于native充其量是说比native慢,而且慢多少需要测试至少是操作体验给个量级的估计。
基于jdbc不能说明比jdbc慢,只能说和写得较好的直接使用jdbc实现比不会更快。由于一般数据库的消耗明显大过hibernate的额外消耗,至少不太复杂的情况没什么影响。
(很复杂的情况我没用过Hibernate,蹲到墙角划圈)
0 请登录后投票
   发表时间:2010-03-25  
miaow 写道
jmu 写道
gdpglc 写道
jmu 写道

  首先hibernate不是写了什么native方法,和厂商合作推出的独立产品,他是基于jdbc api的封装,所以一般来说大多数情况使用hibernate都会比jdbc慢

不知你说慢的原因是什么? 慢多少,能不能量化一下?

可能我没说清楚 这个慢是指向数据库发起查询到返回结果集的单个过程,  详细原因你肯定比我了解的多啊    hibernate已经做了很多优化,但都是针对hibernate容器的,  慢多少我不知道, 

这种说法很不严谨啊。
不是基于native充其量是说比native慢,而且慢多少需要测试至少是操作体验给个量级的估计。
基于jdbc不能说明比jdbc慢,只能说和写得较好的直接使用jdbc实现比不会更快。由于一般数据库的消耗明显大过hibernate的额外消耗,至少不太复杂的情况没什么影响。
(很复杂的情况我没用过Hibernate,蹲到墙角划圈)

个人看法,hibernate初始化慢些,另外转换的消耗会大些,但是在同一个jvm和内存中完成,数量级和通过网络连接数据库不能比,应该可以忽略。

主要还是n+1,这个就转到罗宾说的缓存问题上了。罗宾的帖子是说明缓存是利器。

当程序员内部测试时候,一般没模拟到多用户情况,表现的会比较慢些。

还有就是一些特定操作,不是频繁发生,因此速度就慢些。

另外javaeye是论坛,和企业应用的业务操作也有些不同。
0 请登录后投票
   发表时间:2010-03-25  
前面说速度,没考虑二级缓存。
真需要缓存的情况,用jdbc也可以配同样的缓存系统,不过结合的不好就是了。

不测并发的速度,基本看到就可以忽略了。
实际使用中关注的速度,平均响应并不是关键指标。
一般是诸如“在1000个活跃用户、200个并发下,80%响应时间和最慢的响应时间”之类的东西。至少在企业应用中,这比平均吞吐对用户体验更重要。
在有缓存的情况下还要连续测若干时间以观察缓存的影响,比如说连压一个周末。
这都是起码的要求吧。
11 请登录后投票
   发表时间:2010-03-29   最后修改:2010-03-29
miaow 写道
jmu 写道
gdpglc 写道
jmu 写道

  首先hibernate不是写了什么native方法,和厂商合作推出的独立产品,他是基于jdbc api的封装,所以一般来说大多数情况使用hibernate都会比jdbc慢

不知你说慢的原因是什么? 慢多少,能不能量化一下?

可能我没说清楚 这个慢是指向数据库发起查询到返回结果集的单个过程,  详细原因你肯定比我了解的多啊    hibernate已经做了很多优化,但都是针对hibernate容器的,  慢多少我不知道, 

这种说法很不严谨啊。
不是基于native充其量是说比native慢,而且慢多少需要测试至少是操作体验给个量级的估计。
基于jdbc不能说明比jdbc慢,只能说和写得较好的直接使用jdbc实现比不会更快。由于一般数据库的消耗明显大过hibernate的额外消耗,至少不太复杂的情况没什么影响。
(很复杂的情况我没用过Hibernate,蹲到墙角划圈)


如果单看单次query, 我就不信hibernate能比jdbc快,最多是一样罢了,而且哥们看上句没看下句,看我写的文章不用心啊,罚你从头看,这么说是比较变态的单独比query的, 但是实际上不可能出现这样的情况,用hibernate必须用hibernate session的,用他的缓存,是一套东西,不可能割裂开用,我只是顺着下面讨论的人说了这么一句,就被逮到了... 
  我的意思希望大家能理解,这种比较也是主要误区, session bean管理不好,缓存用不好,不能怪hibernate,  用hibernate处处受制,除非自己对hibernate很精,否则你可以去喷你们老大了
0 请登录后投票
   发表时间:2010-04-10   最后修改:2010-04-10
大家有没有用过ejb的,这东西在性能上应该没什么优势,为什么sun(oracle)还在发展它?现在有什么大型的东西是用ejb搞出来的吗?
之前讨论hibernate时,很多人说在大型项目里不能用 hibernate,要用原生sql才行。 如果这样ejb岂不更要靠边站了?
0 请登录后投票
   发表时间:2010-04-10  
gdpglc 写道
大家有没有用过ejb的,这东西在性能上应该没什么优势,为什么sun(oracle)还在发展它?现在有什么大型的东西是用ejb搞出来的吗?
之前讨论hibernate时,很多人说在大型项目里不能用 hibernate,要用原生sql才行。 如果这样ejb岂不更要靠边站了?

使用session bean包装纯sql也有这样用的。。。。
0 请登录后投票
   发表时间:2010-04-11  
gdpglc 写道
大家有没有用过ejb的,这东西在性能上应该没什么优势,为什么sun(oracle)还在发展它?现在有什么大型的东西是用ejb搞出来的吗?
之前讨论hibernate时,很多人说在大型项目里不能用 hibernate,要用原生sql才行。 如果这样ejb岂不更要靠边站了?

哥们,对你的无知不说什么了,你用过EJB吗?
就是在EJB2.0的时代,它的实体BEAN也是令人诟病的一个东西,也是很少人用这东西,用不用EJB跟原生SQL怎么扯上关系的,用EJB可以作为DDD的一种实现方式,你能了解吗?用EJB解决分布式你了解吗?
实在莫名其妙,用不用原生SQL变成了使用是否使用EJB的一个重要判断了,我真是。。。。。
0 请登录后投票
   发表时间:2010-04-11  
刃之舞 写道
gdpglc 写道
大家有没有用过ejb的,这东西在性能上应该没什么优势,为什么sun(oracle)还在发展它?现在有什么大型的东西是用ejb搞出来的吗?
之前讨论hibernate时,很多人说在大型项目里不能用 hibernate,要用原生sql才行。 如果这样ejb岂不更要靠边站了?

哥们,对你的无知不说什么了,你用过EJB吗?
就是在EJB2.0的时代,它的实体BEAN也是令人诟病的一个东西,也是很少人用这东西,用不用EJB跟原生SQL怎么扯上关系的,用EJB可以作为DDD的一种实现方式,你能了解吗?用EJB解决分布式你了解吗?
实在莫名其妙,用不用原生SQL变成了使用是否使用EJB的一个重要判断了,我真是。。。。。


1.哥们,对你的无知不说什么了,你用过EJB吗?
我的确没用过,所以才问。如果没用过哪个技术就说明这个人无知,恐怕这里所有人,都在这个范围之内。

2就是在EJB2.0的时代,它的实体BEAN也是令人诟病的一个东西,也是很少人用这东西
这个我听说过,但是现在EJB3.0也出来了,它并没有消失是吧。如果ejb真的用在了 只有用原生sql才能开发的场合,那说明什么呢? ejb2.0的实体bean和ejb3.0的JPA都不是原生sql吧,你能明白我想说明什么吧?
所以ejb能不能用在 大型软件 对我们是有很大启示的是不是?

3.我说的问题和DDD无关

4.ejb解不解决分布式和我想说明的也无关。用原生sql就不能做分布式了?

5.如果用原生的sql,ejb提供的持久化功能有什么用呢?你说用不用ejb和用原生sql有没有关?
0 请登录后投票
   发表时间:2010-04-11  
Hibernate我越用就越不想用了。
0 请登录后投票
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics