`
lgx522
  • 浏览: 124371 次
最近访客 更多访客>>
社区版块
存档分类
最新评论

Spring性能小测,参其它技术

    博客分类:
  • Java
阅读更多
昨天参与了“有感而发:JavaEE和ROR的本质区别,以及对ROR的抱怨”(http://pig345.iteye.com/blog/199384)博文上的口水战,对Quake Wang老兄所说的“Ruby比Java确实性能差很多,但是RoR和Struts + Spring + Hibernate做的网站性能是在同一级别的”产生了兴趣,今天抽空测了一下,发现了一些有趣的事情。

首先声明这些测试并不严格,全是在同一台机器(Core2 1.6,2G内存PC)上跑,DB是同一个MySQL,执行简单的单表读写操作,并发100个thread(此并发情况下各种技术基本都不会出Error),都不做缓存。数值都是取rps,具体的绝对数值没有考究的意义,不过相对一比较倒有些意思。

先用笔者前两三年一度热衷的Appfuse,测下来的结果大概在130左右;
然后直接采用Spring的三个例程,一来简单,二来Rod自制的Sample效率应当是有保证的,结果如下:
采用hibernate的petclinic:200左右;
采用ibatis的jpetstore:400左右;
采用jdbc的imagedb:750左右。

大家应该看出些门道来的吧。所以说Rod老大的确是聪明绝顶,早已预备了三种不同的性能方案,做成sample给大家采用。至于大家最后怎么用是自己的事,怪Spring就不对了,Rod真是高明!

顺便附上其它技术体系的参考值(由高到低)吧:
纯PHP:1000左右;
以快速闻名的FleaPHP:800左右;
JSTL:350左右;
Grails:50左右;
Seam:20左右;
RoR:12左右。

这下大家是不是有些总的概念了。基本规律是越偏向SQL的技术,性能越高;越偏向ORM的技术,性能越低。由此可见OO和关系DB的不匹配,不仅仅是在设计和编码上,在性能上更是个天大的问题。
差距如此之大,就连笔者也不禁怀疑起自己的测试。建议有心的同道们做一下更严格的测试以资验证。

值得一提的是,在引入DB前,JSP还是要快过PHP不少,大概是1900:1400左右,但加上DB后,JSP竟然干不过PHP,身为Java fans实在是有些愤怒。不过很久不写JSP了,但愿精于此道的同道写个更高效的,压过PHP才好。

现代主流DB在此配置下每秒钟大多能吞下500-1000条普通SQL。做为中间层,不管怎么做,还是要配得上才行。
是选择开发效率低一些,但性能高的偏SQL方案,还是选择开发效率高,但性能低的编OO方案,不同的场景有不同的回答。
但愿此文能帮助各位同道在不同的项目上能对性能-开发效率做出最好平衡的正确选择。
分享到:
评论
53 楼 kjj 2009-06-03  
罗宾汉 写道

大访问量系统的可扩展性问题主要取决于软件的架构,而不是软件究竟采用什么编程语言。关注性能没有错,但是性能好坏不取决于你用什么编程语言和什么开源框架,而是取决于你的软件架构。当然不同的编程语言实现可扩展性架构的难度有所不同,我觉得这个才是最值得探讨的地方。

对这句很有启发,je的老大果然不虚!!
52 楼 murainwood 2009-06-02  
回复里有很多的精华。
51 楼 key232323 2009-06-02  
呵呵,我也是个来迟大仙,
看后面的讨论,学习了不少。

最近做一个互联网应用,如果能达到50w pv以上了,性能问题就不是简单地调一下mysql配置文件就能解决了的了……不过现在还没动手搞过mysql的ndb,光靠raid也不合适。

以后再做看看相关帖子
50 楼 tongjian 2009-06-02  
这个帖子正文没什么好看的,看下面讨论还有些意思。
49 楼 woaiwofengkuang 2009-05-21  
对于性能我的认为在内存中执行代码总比一条条复杂的SQL要来的快吧
48 楼 yinmang1215 2009-05-21  
呵呵,全程看下来也有些收获。
47 楼 belly 2009-04-02  
晕了,看了半天是头年的帖子。。
偶啥时候成迟来大仙了。

46 楼 belly 2009-04-02  
程序部署在单机上运行速度是一方面,更重要的是伸缩性。如何组成一个高效集群且没有瓶颈。
45 楼 xellos 2008-06-16  
laiseeme 写道
hibernate没问题
有问题的是用hibernate的人


hibernate没问题 是说它在任何情况下都没问题,都适用呢,还是说超过一个百分比的情况没问题。
请问这个百分比是多少。
44 楼 davidcen 2008-06-16  
王者之剑 写道
我觉得这个贴子应该成为精华贴,
如果将这类问题老是搞得看不见的话,就会有人不断提这种问题。
编辑们多努力阿。

题外话说完了,说和性能相关的问题。
其实最能改善软件性能的是大脑的性能,robbin已经说得如此明白,但是有的同学仍然固执到坚强的地步,不知道是不明白,还是放不下。
大的架构方面的robbin已经说了。我从中学到不少。
既然说语言,那就说说语言,不管是C++,Java,ruby,写得好不好对性能的影响远远超过了语言本身。
以前曾经有几个Oracle存储过程,用来计算一些报表数据。计算一次需要20小时左右。
一再给客户解释,存储过程性能问题,要解决要用C语言重写。我最讨厌的就是将时间花在为自己无能的辩解上,而不是花在解决问题上。结果,我将存储过程改写后,四个小时就可以计算完成。发现任何错误重新计算正确的时间在5分钟以内。

不要解决假想的问题,不要把时间浪费在讨论哪门语言上,碰到问题是个好机会,解决它。不要怀疑你所用的语言,多怀疑自己。
做一个小程序来测试性能是很搞笑的事情。
经常见到不到100万条数据就在那里叫数据好多。
搞个连玩具都算不上的东东在那里比较性能。
真的,比较性能这种事,你目前还没有必要做。要做的事,尽可能提高现有系统的性能。重构代码,优化服务器。

上面有位同学说导出20W条数据够呛,其实十几分钟不算长,如果一个月导一次,有什么关系?但内存溢出问题不得不解决。
如果一天导个几次,或者有一万个人要导,而不仅仅是办公室主任一个人要,就是大问题了。任何问题离开了实际的场景没有任何意义。
导这20W数据还有机器配置的问题。
做一件事情,最重要的是方法问题。
让我猜一下这个问题吧。
首先要确认是计算花时间,还是写Excel花时间。
是否可以建临时表,临时文件
是否可以使用多线程
只要把问题搞清楚了,就好解决。
我做过,处理上千万数据生成N个报表,也不需要这么长时间。用的是C++。
但我相信不是语言的问题。
现在一般的PC都比那时好,所以应该更快。

作为程序员,请不要写令人发指的程序来冤枉编程语言。



java有个缺点就是对象的回收速度上比不上C++
一般的计算不花时间,尤其表不是巨大的时候,20w的数据显得不是特别大,excel的cell创建和style渲染会耗费大量的cpu,否则分页输出web格式的报表还是没有太大的问题的,不像excel输出如此变态.
43 楼 saharabear 2008-06-13  
好久没这样一页一页地仔细读贴了,学习了。
42 楼 everlasting_188 2008-06-13  
王者之剑 写道
我觉得这个贴子应该成为精华贴,

其实最能改善软件性能的是大脑的性能,robbin已经说得如此明白,但是有的同学仍然固执到坚强的地步,不知道是不明白,还是放不下。
大的架构方面的robbin已经说了。我从中学到不少。
既然说语言,那就说说语言,不管是C++,Java,ruby,写得好不好对性能的影响远远超过了语言本身。


作为程序员,请不要写令人发指的程序来冤枉编程语言。




赞一个说的很好!!
41 楼 steve_cheng 2008-06-13  
王者之剑 写道

不要解决假想的问题,不要把时间浪费在讨论哪门语言上,碰到问题是个好机会,解决它。不要怀疑你所用的语言,多怀疑自己。


支持这个
40 楼 nianhuaxpj 2008-06-12  
强帖留名

robbin大牛
39 楼 macro.son 2008-06-11  
王者之剑 写道
我觉得这个贴子应该成为精华贴,
如果将这类问题老是搞得看不见的话,就会有人不断提这种问题。
编辑们多努力阿。

题外话说完了,说和性能相关的问题。
其实最能改善软件性能的是大脑的性能,robbin已经说得如此明白,但是有的同学仍然固执到坚强的地步,不知道是不明白,还是放不下。
大的架构方面的robbin已经说了。我从中学到不少。
既然说语言,那就说说语言,不管是C++,Java,ruby,写得好不好对性能的影响远远超过了语言本身。
以前曾经有几个Oracle存储过程,用来计算一些报表数据。计算一次需要20小时左右。
一再给客户解释,存储过程性能问题,要解决要用C语言重写。我最讨厌的就是将时间花在为自己无能的辩解上,而不是花在解决问题上。结果,我将存储过程改写后,四个小时就可以计算完成。发现任何错误重新计算正确的时间在5分钟以内。

不要解决假想的问题,不要把时间浪费在讨论哪门语言上,碰到问题是个好机会,解决它。不要怀疑你所用的语言,多怀疑自己。
做一个小程序来测试性能是很搞笑的事情。
经常见到不到100万条数据就在那里叫数据好多。
搞个连玩具都算不上的东东在那里比较性能。
真的,比较性能这种事,你目前还没有必要做。要做的事,尽可能提高现有系统的性能。重构代码,优化服务器。

上面有位同学说导出20W条数据够呛,其实十几分钟不算长,如果一个月导一次,有什么关系?但内存溢出问题不得不解决。
如果一天导个几次,或者有一万个人要导,而不仅仅是办公室主任一个人要,就是大问题了。任何问题离开了实际的场景没有任何意义。
导这20W数据还有机器配置的问题。
做一件事情,最重要的是方法问题。
让我猜一下这个问题吧。
首先要确认是计算花时间,还是写Excel花时间。
是否可以建临时表,临时文件
是否可以使用多线程
只要把问题搞清楚了,就好解决。
我做过,处理上千万数据生成N个报表,也不需要这么长时间。用的是C++。
但我相信不是语言的问题。
现在一般的PC都比那时好,所以应该更快。

作为程序员,请不要写令人发指的程序来冤枉编程语言。




38 楼 icewubin 2008-06-10  
jander 写道
icewubin 写道
williamy 写道

2。上面谁说ORM,jdbc,在说什么orm快,jdbc快,我只知道两个要点 一:我知道orm都是在jdbc上的,二,程序都是耗时间的


第一点有问题:jdbc不带cache。


可以自己加cache,也不是什么麻烦事。



是啊,不麻烦,jdbc+自己的cache再加上通过反射读取原数据定义(或者xml定义),动态生成sql,就是hibernate了。

我就是把Hibernate当成sql生成器起来用的,从来不把它当什么面向对象数据接口,绝对比什么iBatis方便,特殊需求除外(创建表等)。

还有就是Hibernate对原生sql的支持度是很强的,很多人刚入门的不知道而已,只知道个iBatis。

使用iBatis,一旦碰到sql是要根据一些复杂业务的条件拼出来的就知道痛苦了,大量的工作量在写配置文件和配置脚本,IDE对配置文件支持度是远不如代码的。
37 楼 jander 2008-06-10  
icewubin 写道
williamy 写道

2。上面谁说ORM,jdbc,在说什么orm快,jdbc快,我只知道两个要点 一:我知道orm都是在jdbc上的,二,程序都是耗时间的


第一点有问题:jdbc不带cache。


可以自己加cache,也不是什么麻烦事。

36 楼 icewubin 2008-06-10  
williamy 写道

2。上面谁说ORM,jdbc,在说什么orm快,jdbc快,我只知道两个要点 一:我知道orm都是在jdbc上的,二,程序都是耗时间的


第一点有问题:jdbc不带cache。
35 楼 王者之剑 2008-06-10  
我觉得这个贴子应该成为精华贴,
如果将这类问题老是搞得看不见的话,就会有人不断提这种问题。
编辑们多努力阿。

题外话说完了,说和性能相关的问题。
其实最能改善软件性能的是大脑的性能,robbin已经说得如此明白,但是有的同学仍然固执到坚强的地步,不知道是不明白,还是放不下。
大的架构方面的robbin已经说了。我从中学到不少。
既然说语言,那就说说语言,不管是C++,Java,ruby,写得好不好对性能的影响远远超过了语言本身。
以前曾经有几个Oracle存储过程,用来计算一些报表数据。计算一次需要20小时左右。
一再给客户解释,存储过程性能问题,要解决要用C语言重写。我最讨厌的就是将时间花在为自己无能的辩解上,而不是花在解决问题上。结果,我将存储过程改写后,四个小时就可以计算完成。发现任何错误重新计算正确的时间在5分钟以内。

不要解决假想的问题,不要把时间浪费在讨论哪门语言上,碰到问题是个好机会,解决它。不要怀疑你所用的语言,多怀疑自己。
做一个小程序来测试性能是很搞笑的事情。
经常见到不到100万条数据就在那里叫数据好多。
搞个连玩具都算不上的东东在那里比较性能。
真的,比较性能这种事,你目前还没有必要做。要做的事,尽可能提高现有系统的性能。重构代码,优化服务器。

上面有位同学说导出20W条数据够呛,其实十几分钟不算长,如果一个月导一次,有什么关系?但内存溢出问题不得不解决。
如果一天导个几次,或者有一万个人要导,而不仅仅是办公室主任一个人要,就是大问题了。任何问题离开了实际的场景没有任何意义。
导这20W数据还有机器配置的问题。
做一件事情,最重要的是方法问题。
让我猜一下这个问题吧。
首先要确认是计算花时间,还是写Excel花时间。
是否可以建临时表,临时文件
是否可以使用多线程
只要把问题搞清楚了,就好解决。
我做过,处理上千万数据生成N个报表,也不需要这么长时间。用的是C++。
但我相信不是语言的问题。
现在一般的PC都比那时好,所以应该更快。

作为程序员,请不要写令人发指的程序来冤枉编程语言。


34 楼 icewubin 2008-06-10  
williamy 写道
我就喜欢和robbin抬杠

1,google用python是做什么?粘合剂?太模糊了吧,google用c++作为主力是真的,要求性能的分布式系统都是c++写的,而python是他们的管理系统,至于java是用来干什么的,我不知道,不过我知道他们有40%左右的java开发人员,当然这些人也非常擅长于c++以及python,甚至很多还是js高手,我是说他们一些部门的开发人员。比如mountain view的很多是混混。

2,至于java php ruby性能比拼!我觉得我们不是在写火星车导航系统,计算慢一点没关系的。同时也不是在写apache火力控制系统,稳定性也不用考虑。我们只是在做web app,所以我们看中的不是谁跑的快,而是用那种语言来做,容易跑的快,这个差别很大的。毕竟计算1+2+3。。。+100很快,不代表写一百个模块的系统也很快,反之亦然。

3,ebay里面没听说有牛人,估计只好请咨询啦,看java的要看walmart的,毕竟terracotta的老大来自哪里


之前听说过google用Tapestry,不过找不到明确证据,要说google用java做web的侧面证据是GWT是java的。

相关推荐

    spring2.0技术手册

    林信良著 spring2.0技术手册 《Spring 2.0技术手册》介绍了Spring 2.0的新特性,诸如Spring 2.0的新配置、新AOP支持、增强的IoC、JDBC和form标签等新功能。它通过实际完成一个完整的Spring项目示例,展示了与...

    SSH(struts2,Hibernate,Spring)整合及测试亲测可用

    SSH(struts2,Hibernate,Spring)整合及测试亲测可用,百分之白亲测可用。

    spring2.0技术手册 (扫描版)

    第1章认识Spring 第2章Spring入门 第3章Bean、消息、事件 第4章SpringAOP 第5章JDBC、事务支持 第6章Hibernate与Spring 第7章SpringWebMVC框架 第8章View层方案、Web框架整合 第9章API封装 第10章项目:...

    SPRING3技术内幕

    Spring技术内幕 深入解析Spring架构与设计原理1(完整清晰版),一共两部分,这是第一部分 《Spring技术内幕:深入解析Spring架构与设计原理》是Spring领域的问鼎之作,由业界拥有10余年开发经验的资深Java专家亲自...

    元测单试jnuit spring

    元测单试jnuit spring 元测单试jnuit spring 元测单试jnuit spring 元测单试jnuit spring

    spring技术

    通过策略接口,Spring 框架是高度可配置的,而且包含多种视图技术,例如 JavaServer Pages(JSP)技术、Velocity、Tiles、iText 和 POI。Spring MVC 框架并不知道使用的视图,所以不会强迫您只使用 JSP 技术。Spring...

    Spring技术内幕:深入解析Spring架构与设计原理[汇编].pdf

    Spring技术内幕:深入解析Spring架构与设计原理[汇编].pdf

    Java spring技术路线导图

    spring技术最全面的思维导图,可以参考选择自己的技术路线

    Spring boot如何配置请求的入参和出参json数据格式

    主要介绍了spring boot如何配置请求的入参和出参json数据格式,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下

    Spring技术内幕:深入解析Spring架构与设计原理

    《Spring技术内幕:深入解析Spring架构与设计原理(第2版)》从源代码的角度对Spring的内核和各个主要功能模块的架构、设计和实现原理进行了深入剖析。你不仅能从本书中参透Spring框架的出色架构和设计思想,还能从...

    spring2,spring3 相关技术文档

    spring2,spring3 相关技术文档spring2,spring3 相关技术文档spring2,spring3 相关技术文档spring2,spring3 相关技术文档

    Spring技术内幕:深入解析Spring架构与设计原理.pdf

    Spring技术内幕:深入解析Spring架构与设计原理.pdf

    spring框架,技术详解及使用指导

    spring框架,技术详解及使用指导spring框架,技术详解及使用指导spring框架,技术详解及使用指导spring框架,技术详解及使用指导spring框架,技术详解及使用指导spring框架,技术详解及使用指导spring框架,技术详解及使用...

    Spring技术内幕:深入解析Spring架构与设计原理(第2部分)

    Spring技术内幕:深入解析Spring架构与设计原理(第2部分) 《Spring技术内幕:深入解析Spring架构与设计原理》是Spring领域的问鼎之作,由业界拥有10余年开发经验的资深Java专家亲自执笔!Java开发者社区和Spring...

    Spring3.X编程技术与应用,完整扫描版

    【父亲生病了,求祈福,好人一生平安,谢谢】 ...适合作为软件开发人员进行项目开发时的参 考资料,同时也可作为高校本科生和研究生开设 “JavaWeb编程技术”或“Spring开发技术与应用” 课程的教 材或参考书。

    spring的小demo

    这个小项目体现了spring整合了ibatis的各种技术

    springcloud技术点

    View: H5、Vue.js、Spring Tag、React、angularJs Spring Boot/Spring Cloud: Zuul、Ribbon、Feign、Turbine、Hystrix、Oauthor2、Sleuth、API Gateway、Spring Cloud、...完整项目的源码来源 技术支持1791743380

    大数据+springcloud技术架构图

    大数据+springcloud技术架构图

    SPRING技术内幕:深入解析SPRING架构与设计原理

    SPRING技术内幕:深入解析SPRING架构与设计原理SPRING技术内幕:深入解析SPRING架构与设计原理SPRING技术内幕:深入解析SPRING架构与设计原理SPRING技术内幕:深入解析SPRING架构与设计原理SPRING技术内幕:深入解析...

    spring单元测试

    通过java配置的方式搭建了一个基本的web项目,主要用于单元测试示例,使用了spring支持h2内存数据库,不需要额外安装数据库,可以测试controller层、service层

Global site tag (gtag.js) - Google Analytics