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

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方案,不同的场景有不同的回答。
但愿此文能帮助各位同道在不同的项目上能对性能-开发效率做出最好平衡的正确选择。
分享到:
评论
13 楼 miracle9i 2008-06-05  

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

此句经典
12 楼 Arden 2008-06-05  
这份测试数据相差也太远了吧~~~
11 楼 robbin 2008-06-05  
lgx522 写道

测试这种事情,本就是见仁见智。因为各种技术体系的牛人都有深钻硬挖的本事,比到极端之处,往往是不了了之。
早已声明测试是不严格的,测试所涉及的软件全是在同一台机器上跑,优化配置几乎为0,也就是只要跑得起来就成,这种测试的绝对数值,已经声明是没有意义的。


全部在单机上面跑,没有做任何优化,只要能跑起来就成,这种测试确实没有任何意义。

引用
如果真有兴趣,JE不妨集合几位各技术体系的代表性牛人,在同样的硬件条件下拼一下,也许才能让大家服点气。


不存在服气不服气的问题,反正又不是我发明的编程语言。PHP/Java/Ruby我都用过很长时间,不知道我算代表哪个技术体系?

引用
用意不在比试谁高谁低,而在于提醒大家关注性能问题。现在论坛上大多数帖只在关心开发效率和理论花样了,好像性能已经不再是问题了。可惜,现实中越有用的系统访问量越大,不及早考虑性能问题,早晚是要爆掉的。


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

引用
闲话:近些天发了些不对大家胃口的言论,一下子掉了不少分。此帖也快隐藏了,还是先撤了吧。不当之处敬请谅解,还是诚心祝愿大家的系统个个都能飞快。


大家的胃口是啥呢?

10 楼 xzs 2008-06-05  
lgx522 写道
并发100个thread(此并发情况下各种技术基本都不会出Error


??
9 楼 lgx522 2008-06-05  
robbin 写道
其实你的测试没任何意义,性能测试需要严格的条件和基准,否则结果就是荒谬的。比方说你并没有给出完整的测试环境:测试机器有几台,数据库怎么部署,应用服务器怎么部署,Web服务器怎么部署,操作系统是什么操作系统,操作系统的参数设置,数据库链接的设置,网络设置额带宽,应用服务器的参数设置,压力测试软件是什么?测试方案是什么?report在哪里等等等等。

基于我两年的PHP部署运行经验,六年的Java部署运行经验和两年的Rails部署运行经验,常识就是就是Java的速度要远远超过PHP,而且是超过一个数量级,PHP比Rails快,但是快的很有限。Java的Servlet容器性能也要远远好于Apache的mod_php。实际上mod_php已经越来越不被推荐了,他有比较严重的性能问题。



测试这种事情,本就是见仁见智。因为各种技术体系的牛人都有深钻硬挖的本事,比到极端之处,往往是不了了之。
早已声明测试是不严格的,测试所涉及的软件全是在同一台机器上跑,优化配置几乎为0,也就是只要跑得起来就成,这种测试的绝对数值,已经声明是没有意义的。

如果真有兴趣,JE不妨集合几位各技术体系的代表性牛人,在同样的硬件条件下拼一下,也许才能让大家服点气。

用意不在比试谁高谁低,而在于提醒大家关注性能问题。现在论坛上大多数帖只在关心开发效率和理论花样了,好像性能已经不再是问题了。
可惜,现实中越有用的系统访问量越大,不及早考虑性能问题,早晚是要爆掉的。

闲话:近些天发了些不对大家胃口的言论,一下子掉了不少分。此帖也快隐藏了,还是先撤了吧。不当之处敬请谅解,还是诚心祝愿大家的系统个个都能飞快。
8 楼 robbin 2008-06-05  
其实你的测试没任何意义,性能测试需要严格的条件和基准,否则结果就是荒谬的。比方说你并没有给出完整的测试环境:测试机器有几台,数据库怎么部署,应用服务器怎么部署,Web服务器怎么部署,操作系统是什么操作系统,操作系统的参数设置,数据库链接的设置,网络设置额带宽,应用服务器的参数设置,压力测试软件是什么?测试方案是什么?report在哪里等等等等。

基于我两年的PHP部署运行经验,六年的Java部署运行经验和两年的Rails部署运行经验,常识就是就是Java的速度要远远超过PHP,而且是超过一个数量级,PHP比Rails快,但是快的很有限。Java的Servlet容器性能也要远远好于Apache的mod_php。实际上mod_php已经越来越不被推荐了,他有比较严重的性能问题。

7 楼 QuakeWang 2008-06-05  
这里有一个很完整的各个语言性能对比实验:
这是PHP v.s Java 6的
http://shootout.alioth.debian.org/gp4sandbox/benchmark.php?test=all&lang=php&lang2=java

这是PHP v.s Ruby的
http://shootout.alioth.debian.org/gp4sandbox/benchmark.php?test=all&lang=php&lang2=ruby

PHP和Java在代码执行效率上来说要差2,3个数量级别,它是和Ruby在同一数量级,属于比较慢的那一种。

你说纯粹的rps JSP比不过PHP,倒不如说是servlet container比不过mod_php+apache,也就是在测试C v.s Java
http://shootout.alioth.debian.org/gp4sandbox/benchmark.php?test=all&lang=gcc&lang2=java

---修改分割线---
不好意思,我看错了,你是说加入DB以后的JSP比不过PHP,也就是说性能差异在DB Driver上,还是在测试C v.s Java
6 楼 nihongye 2008-06-05  
lgx522 写道
gof95 写道
给ORM加上缓存再测一下呢?


有兴趣的同道可以试一下。

但注意一点,ORM缓存这一招也就在互联网领域有点小用处。交互性要求一高,用缓存不如不用,用户不满意啊。而现在的Web,交互性要求是越来越高了。
至于以写为主的企业应用,用缓存就是给自己找事儿。少查出一张单据,少统计一条数据,就等着客户跟你没完。

企业应用的缓存,靠的是Oracle这类高级DB,大多数操作都在内存里完成,相当快速。可惜太贵。


hibernate的cache对事务支持可是很好的,不懂ORM cache就不要乱说。
5 楼 wang19841229 2008-06-05  
个人感觉java是偏向企业级应用的,ROR虽然有很多优点但是现在ROR在面临大型项目时确实不是很好实施。至于ORM和sql的问题,个人觉得他们各自有各自的优势和缺点只是正常的,如果ORM比sql开发快性能好,sql也就该消失了。
4 楼 lgx522 2008-06-05  
gof95 写道
给ORM加上缓存再测一下呢?


有兴趣的同道可以试一下。

但注意一点,ORM缓存这一招也就在互联网领域有点小用处。交互性要求一高,用缓存不如不用,用户不满意啊。而现在的Web,交互性要求是越来越高了。
至于以写为主的企业应用,用缓存就是给自己找事儿。少查出一张单据,少统计一条数据,就等着客户跟你没完。

企业应用的缓存,靠的是Oracle这类高级DB,大多数操作都在内存里完成,相当快速。可惜太贵。
3 楼 gof95 2008-06-05  
给ORM加上缓存再测一下呢?
2 楼 lgx522 2008-06-05  
引用
怎么还有JSTL?是用他的sql tag吗?也很接近SQL吧?


用JSTL的sql tag是为了省事,是为了测以纯脚本写SQL方式的性能,与纯PHP相对照。
1 楼 cats_tiger 2008-06-04  
lgx522 写道

JSTL:350左右;

怎么还有JSTL?是用他的sql tag吗?也很接近SQL吧?

相关推荐

    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