该帖已经被评为良好帖
|
|
---|---|
作者 | 正文 |
发表时间:2010-03-24
最后修改:2010-03-24
jmu 写道 gdpglc 写道 jmu 写道 首先hibernate不是写了什么native方法,和厂商合作推出的独立产品,他是基于jdbc api的封装,所以一般来说大多数情况使用hibernate都会比jdbc慢 不知你说慢的原因是什么? 慢多少,能不能量化一下? 可能我没说清楚 这个慢是指向数据库发起查询到返回结果集的单个过程, 详细原因你肯定比我了解的多啊 hibernate已经做了很多优化,但都是针对hibernate容器的, 慢多少我不知道, 呵呵...我是真不了解大家说hibernate慢的原因,所以才问。当然,我了解一些慢的因素,但是我知道的那些,对软件本身的快慢都不会造成明显的影响,更多是理论上的,比如把hql翻译成sql肯定是要花时间的。所以希望这里有人能把所有变慢的因素列出来。 |
|
返回顶楼 | |
发表时间:2010-03-24
jmu 写道 gdpglc 写道 jmu 写道 首先hibernate不是写了什么native方法,和厂商合作推出的独立产品,他是基于jdbc api的封装,所以一般来说大多数情况使用hibernate都会比jdbc慢 不知你说慢的原因是什么? 慢多少,能不能量化一下? 可能我没说清楚 这个慢是指向数据库发起查询到返回结果集的单个过程, 详细原因你肯定比我了解的多啊 hibernate已经做了很多优化,但都是针对hibernate容器的, 慢多少我不知道, 这种说法很不严谨啊。 不是基于native充其量是说比native慢,而且慢多少需要测试至少是操作体验给个量级的估计。 基于jdbc不能说明比jdbc慢,只能说和写得较好的直接使用jdbc实现比不会更快。由于一般数据库的消耗明显大过hibernate的额外消耗,至少不太复杂的情况没什么影响。 (很复杂的情况我没用过Hibernate,蹲到墙角划圈) |
|
返回顶楼 | |
发表时间: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是论坛,和企业应用的业务操作也有些不同。 |
|
返回顶楼 | |
发表时间:2010-03-25
前面说速度,没考虑二级缓存。
真需要缓存的情况,用jdbc也可以配同样的缓存系统,不过结合的不好就是了。 不测并发的速度,基本看到就可以忽略了。 实际使用中关注的速度,平均响应并不是关键指标。 一般是诸如“在1000个活跃用户、200个并发下,80%响应时间和最慢的响应时间”之类的东西。至少在企业应用中,这比平均吞吐对用户体验更重要。 在有缓存的情况下还要连续测若干时间以观察缓存的影响,比如说连压一个周末。 这都是起码的要求吧。 |
|
返回顶楼 | |
发表时间: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很精,否则你可以去喷你们老大了 |
|
返回顶楼 | |
发表时间:2010-04-10
最后修改:2010-04-10
大家有没有用过ejb的,这东西在性能上应该没什么优势,为什么sun(oracle)还在发展它?现在有什么大型的东西是用ejb搞出来的吗?
之前讨论hibernate时,很多人说在大型项目里不能用 hibernate,要用原生sql才行。 如果这样ejb岂不更要靠边站了? |
|
返回顶楼 | |
发表时间:2010-04-10
gdpglc 写道 大家有没有用过ejb的,这东西在性能上应该没什么优势,为什么sun(oracle)还在发展它?现在有什么大型的东西是用ejb搞出来的吗?
之前讨论hibernate时,很多人说在大型项目里不能用 hibernate,要用原生sql才行。 如果这样ejb岂不更要靠边站了? 使用session bean包装纯sql也有这样用的。。。。 |
|
返回顶楼 | |
发表时间:2010-04-11
gdpglc 写道 大家有没有用过ejb的,这东西在性能上应该没什么优势,为什么sun(oracle)还在发展它?现在有什么大型的东西是用ejb搞出来的吗?
之前讨论hibernate时,很多人说在大型项目里不能用 hibernate,要用原生sql才行。 如果这样ejb岂不更要靠边站了? 哥们,对你的无知不说什么了,你用过EJB吗? 就是在EJB2.0的时代,它的实体BEAN也是令人诟病的一个东西,也是很少人用这东西,用不用EJB跟原生SQL怎么扯上关系的,用EJB可以作为DDD的一种实现方式,你能了解吗?用EJB解决分布式你了解吗? 实在莫名其妙,用不用原生SQL变成了使用是否使用EJB的一个重要判断了,我真是。。。。。 |
|
返回顶楼 | |
发表时间: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有没有关? |
|
返回顶楼 | |
发表时间:2010-04-11
Hibernate我越用就越不想用了。
|
|
返回顶楼 | |