首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > 其他数据库 >

用PUnit测试上groovy Sql和spring SimpleJdbcTemplate的性能

2012-08-29 
用PUnit测试下groovy Sql和spring SimpleJdbcTemplate的性能一共两个UnitTest,一个PUnit的Runner,代码如下

用PUnit测试下groovy Sql和spring SimpleJdbcTemplate的性能

一共两个UnitTest,一个PUnit的Runner,代码如下

?

package test;import java.math.BigDecimal;import java.util.Iterator;import java.util.List;import java.util.Map;import org.springframework.jdbc.core.simple.SimpleJdbcTemplate;//import org.springframework.jdbc.datasource.DriverManagerDataSource;import com.mchange.v2.c3p0.DriverManagerDataSource;import junit.framework.TestCase;public class InsertQueryJava extends TestCase {public void testAll() {DriverManagerDataSource ds = new DriverManagerDataSource();//ds.setUsername("xx");//ds.setPassword("xx");//ds.setDriverClassName("oracle.jdbc.driver.OracleDriver");//ds.setUrl("xx");ds.setUser("xx");ds.setPassword("xx");ds.setJdbcUrl("xx");ds.setDriverClass("oracle.jdbc.driver.OracleDriver");SimpleJdbcTemplate tpl = new SimpleJdbcTemplate(ds);String sql1 = "insert into xxxx(a, b) values ('test', 100)";String sql2 = "select a, b from xxxx";tpl.update(sql1);int max = 0;List ll = tpl.queryForList(sql2);Iterator it = ll.iterator();while(it.hasNext()){Map item = (Map) it.next();BigDecimal x = (BigDecimal) item.get("B");if(x.intValue() > max)max = x.intValue();}System.out.println(max);}}

?

?

package testimport com.mchange.v2.c3p0.DriverManagerDataSource;import groovy.sql.Sqlclass InsertQuery extends GroovyTestCase{void testAll(){def p = [url:'xx',u:'xx',p:'xx',driver:'oracle.jdbc.driver.OracleDriver']//def db = Sql.newInstance(p.url, p.u, p.p, p.driver)def ds = new DriverManagerDataSource()ds.setUser(p.u)ds.setPassword(p.p)ds.setJdbcUrl(p.url)ds.setDriverClass(p.driver)def db = new Sql(ds)String sql = "insert into xxxx(a, b) values ('test', 100)"String sql2 = "select a, b from xxxx"db.execute(sql)def ll = db.rows(sql2)int max = 0for(one in ll){if(one.b > max)max = one.b}println max//def item = ll.max{it.b}//println item.b}}

?

?

package test;import org.punit.runner.ConcurrentRunner;public class Runner {public static void main(String[] args) {int threadNum = 20;new ConcurrentRunner(threadNum).run(InsertQueryJava.class);new ConcurrentRunner(threadNum).run(InsertQuery.class);}}

?

windows下jdk1.6.20 groovy1.8.0

通过运行结果发现了几点表面现象:

?

groovy的Sql,直接newInstance比new Sql(datasource)的性能要好

c3p0的DriverManagerDataSource要比spring jdbc的DriverManagerDataSource的性能要好

都编译成class文件后groovy的性能和java的性能几乎一样

?

下面是Runner结果

?

[concurrent] Starting test.InsertQueryJava

test.InsertQueryJava

log4j:WARN No appenders could be found for logger (com.mchange.v2.log.MLog).

log4j:WARN Please initialize the log4j system properly.

100

100

100

100

100

100

100

100

100

100

100

100

100

100

100

100

100

100

100

100

testAll() - [4292.373611ms]

total: 1, failures:0 (GREEN) - 4331.556105ms

[concurrent] Starting test.InsertQuery

test.InsertQuery

100

100

100

100

100

100

100

100

100

100

100

100

100

100

100

100

100

100

100

100

testAll() - [6448.14313ms]

total: 1, failures:0 (GREEN) - 6686.467204ms

?

后面为了使得数据源连接池有个池的效果,我用了一个全局的DataSource,结果更吃惊。。groovy竟然效率更高

?

log4j:WARN No appenders could be found for logger (org.springframework.context.support.ClassPathXmlApplicationContext).

log4j:WARN Please initialize the log4j system properly.

[concurrent] Starting test.InsertQueryJava

test.InsertQueryJava

100

100

100

100

100

100

100

100

100

100

100

100

100

100

100

100

100

100

100

100

testAll() - [1100.632273ms]

total: 1, failures:0 (GREEN) - 1139.438811ms

[concurrent] Starting test.InsertQuery

test.InsertQuery

100

100

100

100

100

100

100

100

testAll() - [237.711986ms]

total: 1, failures:0 (GREEN) - 442.693834ms

100

100

100

100

100

100

100

100

100

100

100

100

?

代码修改如下

package test;import javax.sql.DataSource;import org.springframework.context.support.ClassPathXmlApplicationContext;public class ContextHolder {static ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("classpath*:beans.xml");public static DataSource getDs(){return (DataSource) context.getBean("ds");}}
?package test;
import org.punit.runner.ConcurrentRunner;public class Runner {public static void main(String[] args) {ContextHolder.getDs();int threadNum = 20;new ConcurrentRunner(threadNum).run(InsertQueryJava.class);new ConcurrentRunner(threadNum).run(InsertQuery.class);}}
?


热点排行