论坛首页 Java企业应用论坛

Spring性能小测,参其它技术

浏览 22944 次
精华帖 (2) :: 良好帖 (20) :: 新手帖 (0) :: 隐藏帖 (20)
作者 正文
   发表时间:2008-06-04  
昨天参与了“有感而发: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方案,不同的场景有不同的回答。
但愿此文能帮助各位同道在不同的项目上能对性能-开发效率做出最好平衡的正确选择。
   发表时间:2008-06-04  
lgx522 写道

JSTL:350左右;

怎么还有JSTL?是用他的sql tag吗?也很接近SQL吧?
0 请登录后投票
   发表时间:2008-06-05  
引用
怎么还有JSTL?是用他的sql tag吗?也很接近SQL吧?


用JSTL的sql tag是为了省事,是为了测以纯脚本写SQL方式的性能,与纯PHP相对照。
0 请登录后投票
   发表时间:2008-06-05  
给ORM加上缓存再测一下呢?
0 请登录后投票
   发表时间:2008-06-05  
gof95 写道
给ORM加上缓存再测一下呢?


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

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

企业应用的缓存,靠的是Oracle这类高级DB,大多数操作都在内存里完成,相当快速。可惜太贵。
0 请登录后投票
   发表时间:2008-06-05  
个人感觉java是偏向企业级应用的,ROR虽然有很多优点但是现在ROR在面临大型项目时确实不是很好实施。至于ORM和sql的问题,个人觉得他们各自有各自的优势和缺点只是正常的,如果ORM比sql开发快性能好,sql也就该消失了。
0 请登录后投票
   发表时间:2008-06-05  
lgx522 写道
gof95 写道
给ORM加上缓存再测一下呢?


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

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

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


hibernate的cache对事务支持可是很好的,不懂ORM cache就不要乱说。
0 请登录后投票
   发表时间: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
0 请登录后投票
   发表时间:2008-06-05  
其实你的测试没任何意义,性能测试需要严格的条件和基准,否则结果就是荒谬的。比方说你并没有给出完整的测试环境:测试机器有几台,数据库怎么部署,应用服务器怎么部署,Web服务器怎么部署,操作系统是什么操作系统,操作系统的参数设置,数据库链接的设置,网络设置额带宽,应用服务器的参数设置,压力测试软件是什么?测试方案是什么?report在哪里等等等等。

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

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

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



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

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

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

闲话:近些天发了些不对大家胃口的言论,一下子掉了不少分。此帖也快隐藏了,还是先撤了吧。不当之处敬请谅解,还是诚心祝愿大家的系统个个都能飞快。
0 请登录后投票
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics