昨天参与了“有感而发: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方案,不同的场景有不同的回答。
但愿此文能帮助各位同道在不同的项目上能对性能-开发效率做出最好平衡的正确选择。
分享到:
相关推荐
了解CGLIB和Objenesis的工作原理,可以帮助我们更好地理解Spring如何实现依赖注入、AOP以及其它高级特性。例如,CGLIB的代理过程涉及到了ASM库,Objenesis的实例化机制则涉及了Java的反射API和类加载器。通过深入...
1. 高性能:相对于其他动态代理库(如Java的反射API或JDK动态代理),CGLIB的代理效率更高。 2. 易于使用:Spring框架已经封装了CGLIB的使用,开发者通常不需要直接与CGLIB库交互。 `spring-objenesis-repack-2.5.1...
Spring框架是Java开发中不可或缺的一部分,它为开发者提供了丰富的功能,包括依赖注入、AOP(面向切面编程)、MVC(模型-视图-控制器)等。在给定的文件中,我们关注的是两个特定的库:`spring-objenesis-repack-2.4...
此外,Spring还提供了AOP支持,允许开发者定义切面,进行跨切面的关注点处理,如日志记录、性能监控等。另外,Spring MVC作为Web应用的解决方案,提供了模型-视图-控制器架构,使Web开发更加简洁高效。 总的来说,...
7. **技术栈**:除了SSM框架外,系统可能还会用到其他技术,如HTML/CSS/JavaScript进行前端页面开发,MySQL作为关系型数据库存储数据,Git进行版本控制,Maven或Gradle进行项目构建,JUnit进行单元测试等。...
Spring还提供了数据访问抽象,包括JDBC、ORM和OXM支持,以及对其他多种框架的集成,如Hibernate、MyBatis等。 **Hibernate5** Hibernate是Java中流行的持久化框架,它简化了数据库操作,使得开发者可以使用对象模型...
### Spring Boot 免安装整合 OpenCV 兼容 Windows 和 Linux 的详细知识点 #### 一、OpenCV 功能概述 OpenCV 是一个强大的开源计算机视觉和机器学习库,它提供了广泛的功能来处理图像和视频数据。以下是一些核心...
6. **其他可能涉及的技术**: - **WebSocket**:实现实时通信,如会议状态更新、消息推送。 - **任务调度**:如Quartz,用于定时任务,如自动提醒、日程推送。 - **消息队列**:如RabbitMQ或Kafka,处理高并发下...
9. **屏幕共享**:实现屏幕共享通常涉及捕获屏幕图像并编码成流媒体格式,然后通过WebSocket发送到其他参会者。JavaFX或AWT库可用于获取屏幕图像。 10. **会议管理**:会议的创建、修改、删除以及参会者管理等功能...
10. **持续集成/持续部署(CI/CD)**:Spring Boot项目常配合Jenkins、GitLab CI/CD或其他工具实现自动化构建和部署。 综上所述,"project_backend:Spring Boot中的项目后端"很可能是一个使用Spring Boot和Java构建的...
SSM会议管理系统是一款基于JavaWeb技术的完整毕业设计项目,主要使用了Spring、SpringMVC和MyBatis(SSM)三大主流Java企业级开发框架。这个系统旨在为用户提供便捷的会议管理功能,包括会议创建、参会人员管理、...
本课程由知名讲师Nelio Alves主讲,旨在深入讲解Spring Boot框架的使用,以及如何与其他技术如Hibernate、RESTful API、Ionic前端框架、JSON Web Token(JWT)安全机制、Amazon S3云存储服务以及MySQL数据库进行高效...
4. **实时通信**:为了实现实时的在线交流,可能采用了WebSocket或其他实时通信协议,允许参会者进行视频、音频通话和聊天。 5. **安全性和隐私保护**:考虑到数据敏感性,系统应包含加密技术、身份验证和授权机制...
10. **性能优化**:考虑到实时人脸识别的性能要求,项目可能采用了GPU加速、模型量化、模型剪枝等技术来优化模型的运行速度。 总结起来,"OnlineFaceRecognition-master.zip"项目涵盖了Java编程、计算机视觉、深度...
5. **日志和监控模块**:SpringBoot集成了Actuator,可以提供健康检查、性能指标、审计日志等功能,有助于系统运维和问题排查。 6. **数据库操作模块**:SpringData JPA或MyBatis等ORM框架可能被用来与数据库交互,...
这是一个基于SSM(Spring、SpringMVC、MyBatis)框架和MySQL数据库开发的线上会议管理系统源码项目。SSM是Java开发中的经典组合,广泛应用于企业级应用系统开发,尤其在Web领域。下面我们将详细探讨这个项目所涉及的...
前端界面可能使用JSP、Thymeleaf或其他模板引擎,结合Ajax技术实现动态交互。同时,系统应考虑异常处理、性能优化、安全性等方面,确保稳定可靠运行。 总的来说,这个SSM框架编写的会议室视频会议记录单管理系统,...
【丁韦尔护理之家后端】项目是一款基于Java技术栈的Spring Boot 2.0应用程序,主要用于构建养老护理服务的后台系统。这个项目的核心是利用Spring框架的强大功能,为前端提供稳定、高效的RESTful API接口,以实现数据...
9. **数据分析**:可能集成Google Analytics或其他工具对用户行为进行追踪,以便优化应用性能和用户体验。 10. **日志和监控**:使用Log4j或SLF4J记录应用日志,配合ELK Stack(Elasticsearch, Logstash, Kibana)...