`
Jason__Chen
  • 浏览: 14653 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
文章分类
社区版块
存档分类
最新评论

DBCP,C3P0,Proxool,BoneCP性能比较

    博客分类:
  • JAVA
阅读更多
1 c3p0、dbcp、proxool、BoneCP比较
1.1 测试环境:
操作系统:windows xp sp3
数据库:mysql 5.1
1.2 测试条件:
initialSize=30;
maxSize=200;
minSize=30;
其余参数为默认值;
1.3 测试代码:
利用JAVA代码模拟多线程对这三种数据库连接池进行测试,通过花费的时间判断效率
DBTest.java:
public class DBTest implements Runnable /*extends Thread*/ {
public long date1=0;
private static Proxool proxool;
public static int count = 0;
public static void main(String[] args) throws Exception {
//DBCP.init();
//C3P0.init();
//proxool = Proxool.getInstance();
BoneCPConn.init();
DBTest test = new DBTest();
test.startup();
}

public void startup() {
for (int i = 0; i <5; i++) {
Thread thread = new Thread(this);
thread.start();
}
}

public void run() {
if(date1==0)
{
date1 = System.currentTimeMillis();
System.out.println(date1);
}
for(int i=0 ; i<10 ; i++){
try {
//Connection conn = DBCP.getConnection();
// Connection conn = C3P0.getConnection();
//Connection conn =proxool.getConnection();
Connection conn = BoneCPConn.getConnection();
if (conn != null) {
Statement statement = conn.createStatement();
ResultSet rs = statement.executeQuery("select * from user where id=1");
while (rs.next()) {
String username = rs.getString(2);
System.out.println(username);
}
rs.close();
statement.close();
conn.close();
}
} catch (SQLException e) {
e.printStackTrace();
}
}
count++;
if(count==5)
{
long date2 = System.currentTimeMillis();
System.out.println(date2);
System.out.println("运行完毕!耗时为:" + (date2 - date1) + "ms");
}
}
}
4.3.1 模拟5个线程循环10次并发访问数据库
DBCP用时1181ms
C3P0用时860ms
Proxool用时1563ms
BoneCP用时31ms
4.3.2 模拟10个线程循环10次并发访问数据库
DBCP用时1188ms
C3P0用时953ms
Proxool用时1625ms
BoneCP用时63ms
4.3.3 模拟20个线程循环10次并发访问数据库
DBCP用时1204ms
C3P0用时1000ms
Proxool用时1640ms
BoneCP用时110ms
4.3.4 模拟30个线程循环10次并发访问数据库
DBCP用时1250ms
C3P0用时1047ms
Proxool用时1657ms
BoneCP用时156ms
4.3.5 模拟50个线程循环10次并发访问数据库
DBCP用时1406ms
C3P0用时1343ms
Proxool用时1843ms
BoneCP用时172ms
4.3.6 模拟100个线程循环10次并发访问数据库
DBCP用时1641ms
C3P0用时2703ms
Proxool用时2031ms
BoneCP用时532ms
4.3.7 模拟200个线程循环10次并发访问数据库
DBCP用时2093ms
C3P0用时4891ms
Proxool用时2406ms
BoneCP用时936ms
4.3.8 模拟500个线程循环10次并发访问数据库
DBCP用时3219ms
C3P0用时11703ms
Proxool用时3343ms
BoneCP用时1922ms
4.3.9 模拟800个线程循环10次并发访问数据库
DBCP用时4688ms
C3P0用时12063ms
Proxool用时4141ms
BoneCP用时2859ms
4.3.10 模拟1000个线程循环10次并发访问数据库
DBCP用时5187ms
C3P0用时12563ms
Proxool用时4703ms
BoneCP用时3610ms
4.3.11 模拟3000个线程循环10次并发访问数据库
DBCP用时14094ms
C3P0用时16297ms
Proxool用时11344ms
BoneCP用时11391ms
4.3.12 模拟5000个线程循环10次并发访问数据库
DBCP用时23610ms
C3P0用时22032ms
Proxool用时20125ms
BoneCP用时17125ms

4.4测试结果分析:
         BoneCP一直保持性能最佳
4.5 测试结论
          通过对四种数据库连接池的性能测试发现,BoneCP的性能明显优于其它三种.
分享到:
评论
50 楼 tcw290 2013-01-31  
楼主:您这样测试只是测试的connection 连接后查询,只创建一个BoneCP,如果WEB并发请求每个请求都要创建一个BoneCP,效果很慢,我测试过,
49 楼 tcw290 2013-01-31  
楼主:您这样测试只是测试的connection 连接后查询,只创建一个BoneCP,如果WEB并发请求每个请求都要创建一个BoneCP,效果很慢,我测试过,
48 楼 forank 2012-05-08  
Proxool运行提示Load Configuration failed ! Parsing failed.
47 楼 forank 2012-05-08  
楼主代码BoneCPConn总是报数据库连接失败,求解
46 楼 forank 2012-05-08  
楼主代码BoneCPConn总是报数据库连接失败,求解
45 楼 flyfly98 2010-12-07  
BoneCP测试过了,性能的确最好,下次项目里改过来看看
44 楼 caodegao 2010-12-04  
看看~~是不是传说中一样好
43 楼 wenxiang_tune 2010-12-04  
额  一直用C3P0 我觉得C3P0还有一个好处就是稳定啊
42 楼 cxl2086 2010-10-31  
未比较过,看一下。
41 楼 wwadge 2010-10-29  
(对不起,我不知道中国 - 使用谷歌翻译)

Wallace
BoneCP 创造者
40 楼 wwadge 2010-10-29  
caoyangx 写道
BoneCP最近一直用,昨天还升级最新的,不过设计的还不是很合适,BoneCP采用长连接方式,一旦数据库故障或网络故障发生后,连接池就会失效,即使解决故障后也得重启web服务。这点不如DBCP。还有配置文件比较让人头晕,一大堆配置,有用的一个没有,比如defaultCommit,他默认是true,也没法改成false,这样的话有些嵌套事务就无法回滚,所以我下了他的源码手动修改后重新编译成jar。我都等了3个版本也不见作者修改这个问题。总体来说,还算可以,我没有做过测试。我不知道BoneCP比DBCP快多少,但是感官上是一样的。



http://jolbox.com/bonecp/downloads/site/apidocs/com/jolbox/bonecp/BoneCPConfig.html#setTransactionRecoveryEnabled(boolean)


v0.7.1-SNAPSHOT:


defaultAutoCommit, transactionIsolation, ...:
http://github.com/wwadge/bonecp/blob/master/bonecp/src/main/java/com/jolbox/bonecp/BoneCPConfig.java#L1331

/**
* Sets the defaultAutoCommit setting for newly created connections. If not set, use driver default.
* @param defaultAutoCommit the defaultAutoCommit to set
*/
public void setDefaultAutoCommit(Boolean defaultAutoCommit) {
this.defaultAutoCommit = defaultAutoCommit;
}



/**
* Sets the defaultReadOnly setting for newly created connections. If not set, use driver default.
* @param defaultReadOnly the defaultReadOnly to set
*/
public void setDefaultReadOnly(Boolean defaultReadOnly) {
this.defaultReadOnly = defaultReadOnly;
}


/**
* Sets the defaultCatalog setting for newly created connections. If not set, use driver default.
* @param defaultCatalog the defaultCatalog to set
*/
public void setDefaultCatalog(String defaultCatalog) {
this.defaultCatalog = defaultCatalog;
}


/**
* Sets the defaultTransactionIsolation. Should be set to one of: NONE, READ_COMMITTED, READ_UNCOMMITTED, 
* REPEATABLE_READ or SERIALIZABLE. If not set, will use driver default.
* @param defaultTransactionIsolation the defaultTransactionIsolation to set
*/
public void setDefaultTransactionIsolation(String defaultTransactionIsolation) {
this.defaultTransactionIsolation = defaultTransactionIsolation;
}
39 楼 wwadge 2010-10-29  
kenshinlk 写道
请教一下楼主,对于Bonecp:
1.有没有类似proxool的监测后台,即用org.logicalcobwebs.proxool.admin.servlet.AdminServlet配置的监测后台


JMX @ v0.7.1-SNAPSHOT:

BoneCPConfig.java:

/**
* If set to true, keep track of some more statistics for exposure via JMX. Will slow down the pool
* operation.
* @param statisticsEnabled set to true to enable
*/
public void setStatisticsEnabled(boolean statisticsEnabled) {
this.statisticsEnabled = statisticsEnabled;
}



---


/** Set to true to disable JMX.
* @param disableJMX the disableJMX to set
*/
public void setDisableJMX(boolean disableJMX) {
this.disableJMX = disableJMX;
}



Wallace
38 楼 wwadge 2010-10-29  
xieshaohu 写道
c3p0重连是没有问题的。用DBCP的时候重连碰到过失败的时候。


http://jolbox.com/bonecp/downloads/site/apidocs/com/jolbox/bonecp/BoneCPConfig.html#setTransactionRecoveryEnabled(boolean)
http://aruld.info/handling-flux-database-outages-using-bonecp-connection-pool/

Wallace
37 楼 xieshaohu 2010-10-26  
c3p0重连是没有问题的。用DBCP的时候重连碰到过失败的时候。
36 楼 srdrm 2010-10-26  
rustlingwind 写道
srdrm 写道
性能不是核心问题

能够断线重连,失败恢复的连接池才更可靠



我也很关心自动重连的问题。尤其是生产环境下,启动n个应用服务器节点的情况,重启数据库后还要重启n个应用服务器节点简直太麻烦,而且,对于实时性要求较高的网站来说,也是不允许的。
而对于性能来说,这几种常见连接池的性能个人感觉不会差距太大,而且如果网站的性能有问题,一般性能瓶颈也绝不会是在数据库连接池上。

我想提一个问题就是,对于dbcp,c3p0等连接池来说,如果使用其自带的自动重连机制,势必导致每个数据库访问都要加上一次查询,这种机制对性能的影响也未免太大了吧?!肯定有更简单有效的实现方式,为何不提供呢?比如有一个守护线程,主动定期检查,或者被动收到到连接断开的异常信息后,便开始以一定的时间间隔自动重连数据库,这样对性能的开销影响最小。难道这种机制还需要自己实现?我知道 spy memcached 的自动重连机制就是这样的,但是为何这些数据库连接池的自动重连机制这么烂呢?求高手解惑!

其他连接池用得不多,c3p0 好好看看配置参数,重连机制是有的,小心地配置那些参数,会让你的应用更稳定,数据库重启自动重连不是问题
35 楼 永恒守护者 2010-10-25  
换个服务器环境,换个数据库试试
34 楼 zhzhwe 2010-10-25  
LZ的简单的测试并不能真实反映出效率问题.
33 楼 fabulous 2010-10-25  
可以看看 :http://www.iteye.com/topic/725879
32 楼 笑我痴狂 2010-10-25  
很不错  学习了   我之前用的都是c3p0   改天也测测BoneCP
31 楼 rocketball 2010-10-25  
kenshinlk 写道
请教一下楼主,对于Bonecp:
1.有没有类似proxool的监测后台,即用org.logicalcobwebs.proxool.admin.servlet.AdminServlet配置的监测后台

2.自动重连机制如何,即应用服务器和数据库服务器曾经短暂性断开过,proxool能够比较好的自动重连,bonecp应该如何配置呢(曾经尝试过,但貌似会抛错)?


确实会跑错,但是自动重连还是生效的

相关推荐

    Spring3中配置DBCP,C3P0,Proxool,Bonecp数据源

    在Spring3中配置数据源,包括DBCP,C3P0,Proxool,Bonecp主要的数据源,里面包含这些数据源的jar文件和依赖文件及配置文件。。 如Bonecp目前听说是最快的数据源,速度是传统的c3p0的25倍, bonecp.properties文件: ...

    JAVA数据库连接池(C3P0,Druid,JNDI ,DBCP,Proxool,BoneCP)

    JAVA数据库连接池(C3P0,Druid,JNDI ,DBCP,Proxool,BoneCP) 源码包含各个数据库连接池的连接DEMO spring+mybatis+maven

    数据连接池用法(C3PO,proxool,dbcp,bonecp)

    (C3PO,proxool,dbcp,bonecp)各个连接池的配置以及用法讲解

    druid-1.0.19

    Druid是目前最好的数据库连接池,在功能、性能、扩展性方面,都超过其他数据库连接池,包括DBCP、C3P0、BoneCP、Proxool、JBoss DataSource。 Druid已经在阿里巴巴部署了超过600个应用,经过一年多生产环境大规模...

    druid-0.2.20

    Druid是目前最好的数据库连接池,在功能、性能、扩展性方面,都超过其他数据库连接池,包括DBCP、C3P0、BoneCP、Proxool、JBoss DataSource。 Druid已经在阿里巴巴部署了超过600个应用,经过一年多生产环境大规模...

    druid-1.0.25

    Druid是阿里巴巴的开源产品,目前最好的数据库连接池,在功能、性能、扩展性方面,都超过其他数据库连接池,包括DBCP、C3P0、BoneCP、Proxool、JBoss DataSource。

    druid各版本jar包

    Druid首先是一个数据库连接池。Druid是目前最好的数据库连接池,在功能、性能、扩展性方面,都超过其他数据库连接池,包括DBCP、C3P0、BoneCP、Proxool、JBoss DataSource。

    druid-1.1.12.jar

    Druid首先是一个数据库连接池。Druid是目前最好的数据库连接池,在功能、性能、扩展性方面,都超过其他数据库连接池,包括DBCP、C3P0、BoneCP、Proxool、JBoss DataSource。

    druid-1.0.11.jar

    Druid是目前最好的数据库连接池,在功能、性能、扩展性方面,都超过其他数据库连接池,包括DBCP、C3P0、BoneCP、Proxool、JBoss DataSource。 Druid已经在阿里巴巴部署了超过600个应用,经过一年多生产环境大规模...

    Druid数据库连接池Jar包

    Druid是目前最好的数据库连接池,在功能、性能、扩展性方面,都超过其他数据库连接池,包括DBCP、C3P0、BoneCP、Proxool、JBoss DataSource。Druid已经在阿里巴巴部署了超过600个应用,经过一年多生产环境大规模部署...

    基于SSM架构实现的大型分布式购物网站-B2C项目源码+项目说明.zip

    Druid是目前最好的数据库连接池,在功能、性能、扩展性方面,都超过其他数据库连接池,包括DBCP、C3P0、BoneCP、Proxool、JBoss DataSource。 Druid已经在阿里巴巴部署了超过600个应用,经过多年多生产环境大规模...

Global site tag (gtag.js) - Google Analytics