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

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的。

相关推荐

    spring-cglib-repack-3.2.5.jar,spring-objenesis-repack-2.6.ja及ck-2.5.1.jar

    了解CGLIB和Objenesis的工作原理,可以帮助我们更好地理解Spring如何实现依赖注入、AOP以及其它高级特性。例如,CGLIB的代理过程涉及到了ASM库,Objenesis的实例化机制则涉及了Java的反射API和类加载器。通过深入...

    spring-cglib-repack-3.2.4.jar和spring-objenesis-repack-2.5.1.jar

    1. 高性能:相对于其他动态代理库(如Java的反射API或JDK动态代理),CGLIB的代理效率更高。 2. 易于使用:Spring框架已经封装了CGLIB的使用,开发者通常不需要直接与CGLIB库交互。 `spring-objenesis-repack-2.5.1...

    pring-objenesis-repack-2.4.jar spring-cglib-repack-3.2.4.jar

    Spring框架是Java开发中不可或缺的一部分,它为开发者提供了丰富的功能,包括依赖注入、AOP(面向切面编程)、MVC(模型-视图-控制器)等。在给定的文件中,我们关注的是两个特定的库:`spring-objenesis-repack-2.4...

    spring学习笔记

    此外,Spring还提供了AOP支持,允许开发者定义切面,进行跨切面的关注点处理,如日志记录、性能监控等。另外,Spring MVC作为Web应用的解决方案,提供了模型-视图-控制器架构,使Web开发更加简洁高效。 总的来说,...

    基于ssm会议管理系统.zip

    7. **技术栈**:除了SSM框架外,系统可能还会用到其他技术,如HTML/CSS/JavaScript进行前端页面开发,MySQL作为关系型数据库存储数据,Git进行版本控制,Maven或Gradle进行项目构建,JUnit进行单元测试等。...

    ssh框架基础包

    Spring还提供了数据访问抽象,包括JDBC、ORM和OXM支持,以及对其他多种框架的集成,如Hibernate、MyBatis等。 **Hibernate5** Hibernate是Java中流行的持久化框架,它简化了数据库操作,使得开发者可以使用对象模型...

    springboot免安装整合Opencv兼容windows和linux.doc

    ### Spring Boot 免安装整合 OpenCV 兼容 Windows 和 Linux 的详细知识点 #### 一、OpenCV 功能概述 OpenCV 是一个强大的开源计算机视觉和机器学习库,它提供了广泛的功能来处理图像和视频数据。以下是一些核心...

    会议管理系统‘.rar

    6. **其他可能涉及的技术**: - **WebSocket**:实现实时通信,如会议状态更新、消息推送。 - **任务调度**:如Quartz,用于定时任务,如自动提醒、日程推送。 - **消息队列**:如RabbitMQ或Kafka,处理高并发下...

    java会议系统相关代码

    9. **屏幕共享**:实现屏幕共享通常涉及捕获屏幕图像并编码成流媒体格式,然后通过WebSocket发送到其他参会者。JavaFX或AWT库可用于获取屏幕图像。 10. **会议管理**:会议的创建、修改、删除以及参会者管理等功能...

    project_backend:Spring Boot中的项目后端

    10. **持续集成/持续部署(CI/CD)**:Spring Boot项目常配合Jenkins、GitLab CI/CD或其他工具实现自动化构建和部署。 综上所述,"project_backend:Spring Boot中的项目后端"很可能是一个使用Spring Boot和Java构建的...

    Javaweb会议管理系统 SSM会议管理毕业设计 论文+源码+sql脚本 完整源码

    SSM会议管理系统是一款基于JavaWeb技术的完整毕业设计项目,主要使用了Spring、SpringMVC和MyBatis(SSM)三大主流Java企业级开发框架。这个系统旨在为用户提供便捷的会议管理功能,包括会议创建、参会人员管理、...

    Curso-Spring-Boot:Curso de Spring Boot,Hibernate,REST,Ionic,JWT,S3和MySQL做教授Nelio Alves

    本课程由知名讲师Nelio Alves主讲,旨在深入讲解Spring Boot框架的使用,以及如何与其他技术如Hibernate、RESTful API、Ionic前端框架、JSON Web Token(JWT)安全机制、Amazon S3云存储服务以及MySQL数据库进行高效...

    EnableCE在线会议活动管理系统.7z

    4. **实时通信**:为了实现实时的在线交流,可能采用了WebSocket或其他实时通信协议,允许参会者进行视频、音频通话和聊天。 5. **安全性和隐私保护**:考虑到数据敏感性,系统应包含加密技术、身份验证和授权机制...

    OnlineFaceRecognition-master.zip

    10. **性能优化**:考虑到实时人脸识别的性能要求,项目可能采用了GPU加速、模型量化、模型剪枝等技术来优化模型的运行速度。 总结起来,"OnlineFaceRecognition-master.zip"项目涵盖了Java编程、计算机视觉、深度...

    视频会议系统后端源码基于springboot开发.zip

    5. **日志和监控模块**:SpringBoot集成了Actuator,可以提供健康检查、性能指标、审计日志等功能,有助于系统运维和问题排查。 6. **数据库操作模块**:SpringData JPA或MyBatis等ORM框架可能被用来与数据库交互,...

    基于ssm-mysql-线上会议管理系统-源码.zip

    这是一个基于SSM(Spring、SpringMVC、MyBatis)框架和MySQL数据库开发的线上会议管理系统源码项目。SSM是Java开发中的经典组合,广泛应用于企业级应用系统开发,尤其在Web领域。下面我们将详细探讨这个项目所涉及的...

    SSM框架编写的一个会议室视频会议记录单管理的系统

    前端界面可能使用JSP、Thymeleaf或其他模板引擎,结合Ajax技术实现动态交互。同时,系统应考虑异常处理、性能优化、安全性等方面,确保稳定可靠运行。 总的来说,这个SSM框架编写的会议室视频会议记录单管理系统,...

    dinewell-carehome-be:Dinewell Carehome后端

    【丁韦尔护理之家后端】项目是一款基于Java技术栈的Spring Boot 2.0应用程序,主要用于构建养老护理服务的后台系统。这个项目的核心是利用Spring框架的强大功能,为前端提供稳定、高效的RESTful API接口,以实现数据...

    Attend-In

    9. **数据分析**:可能集成Google Analytics或其他工具对用户行为进行追踪,以便优化应用性能和用户体验。 10. **日志和监控**:使用Log4j或SLF4J记录应用日志,配合ELK Stack(Elasticsearch, Logstash, Kibana)...

Global site tag (gtag.js) - Google Analytics