Spring性能小测,参其它技术

昨天参与了“有感而发: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方案,不同的场景有不同的回答。
但愿此文能帮助各位同道在不同的项目上能对性能-开发效率做出最好平衡的正确选择。

你可能感兴趣的:(spring,编程,PHP,企业应用,大众硬件)