jspxpool连接池帮助

1.连接池使用说明

jspxpool是一个数据库连接池,目前开源社区有很多连接池各有特点。目前测试下来感觉性能和并发性都非常出色的是c3p0连接池。 它能够保证低连接数,尽可能的提供更多连接。下边我简单介绍一下jspx连接池和其他连接池的不同点和使用方法。和为什么我要写这个连接池,它有什么特点。并且比较了目前比较主流的几个数据库。
如果你在使用了其他连接池都感到不满意的化,推荐你使用本连接池看看效果.
jspxpool数据库连接池的特点:
  • 使用jdk1.5的新特性类型管理数据库连接.完美的解决了同步和并发的问题.
  • 据有高并发和快速连接能力.
  • jdbc3.0 接口实现.
  • 实现了标准的DataSource接口和ConnectionPoolDataSource接口,能够方便的的使用在其他应用中.
  • 能够自动回收内存泄露,避免内存溢出.
  • 防止了超时断开连接的问题.(经典的是mysql的8小时问题).
  • 防止web服务器和数据库不在同一台计算机上,数据库从启后就不能够在连接的问题.

  • 2.使用方法

    通过下边的方法就开源知道如何使用了。你开源在ioc容器中使用下边的配置就开源在不同平台上使用。
    方法名称主要是为了兼容c3p0,所以设置的基本参数和c3p0很相像。
    下边是sioc的配置

    如果你想在程序中直接使用也很简单。下边的代码就能够让你得到数据源对象。使用完毕后注意要关闭连接。
    maxConnectionTime影响速度,一般在10来分钟就差不多了。当有这么长的时间还没有使用的物理连接就关闭释放了。当然也不要太太小了,释放太快影响速度。 而且使用的时候使用单列创建一个数据源就可以了。
    3.多线程,高并发,多事务分析比较和特点,2000年以前测试结果,现在如何有代测试。

    Connection运行流程和c3p0连接池的很相像。但使用的容器不同,c3p0是使用的自己写的容器。
    而jspx连接池使用的是jdk1.5的新特性,所以只能够运行在jdk1.5平台以上版本。
    下边我来做了一下简单的测试,和兼容性测试。2008年。
    测试环境是postgresql数据库。使用 Sober分别开启30个线程,每个线程完成1池查询,一次更新带事务然后在查询。每个线程只等待一秒就重复执行。
    其他参数使用默认,我们只修改最大连接数来测试比较。运行200次计算平均值,大家可以看到环境是比 较刻薄的了。
    里边的数字表示一个线程完成一次里边3个操作所平均需要的时间。
    使用的是应用方式测试,而不是web方式测试。也许web环境下会有些不同。
    连接池 最大连接数5 最大连接数50
    JspxDataSource 98 45-50
    C3p0 30-35 73-80
    apache dbcp 都出现线程冲突,和错误改为tomcat web方式下测试结果tomcat大量错误
    proxool 大量错误不稳定改为tomcat web方式下测试结果tomcat大量错误

            测试结果为c3p0和JspxDataSource都比较稳定。而dbcp和proxool都不是很让我感到满意。 怪不得hibernate官方不推荐使用apache 的连接池。
    是有点问题(也许后期已经改进,我就不在做测试了)。 hibernate管方比较推荐使用c3p0. 如果你不考虑使用JspxDataSource那么c3p0就是最好的选择了。 然后我们来分析一下上边测试有一个比较有趣的事情。最大连接数为5的时候,高并发下c3p0非常的快。而且运行效果很好,设置为50的时候反而慢下来了一点。而JspxDataSource是连接数越多越快,我本人推荐在sober中使用JspxDataSource就可以了。c3p0为第二替代方案。 当然也可以使用其他的连接池。效果如何就不做评价了。 当在运行测试的时候观看数据库的连接控制台,另外还有一个比较有意思的的问题。 c3p0的查询是轮询方式的。而JspxDataSource使用jdk1.5的新特性来管理连接后查询是并发方式的。 所以说明如果在高压下,JspxDataSource的连接数较大的情况下速度是比c3p0较快。最大50连接数web环境为多线程环境,测试后速度几乎一样,最大5连接数的时候JspxDataSource的并发又好于c3p0,他们两都很稳定。
        从上边的测试结果可以看出,每个连接池的性能特点都各有不同。做为应用方式运行和web方式运行的结果也不一样。选择一个优秀的连接池对应你的项目稳定性和运行性能上都有很大的差别。
      
    做以上测试的时候BoneCP还没存在,后台本连接池做了多次优化调整,速度和BoneCP相差不大。

    4.分布式读写分离负载均衡支持

    连接池能够支持读写分离的目前不多,就算连接池支持ORM支持意义也不大,毕竟手工的代码调用来实现分布式读写分对应用的调整比较大,购并不小,
    在本构架中提供了完整的分布式读写分离负载均衡支持,开始的目的是针对postgresql 9.x后提供的主从数据库集群。这需要sober的支持,配置后就可以实现,无需代码,很方便。当然用在其他数据库上也没问题,4.5版本以后支持。
    配置方式如下:

    <bean id="readDataSource" class="com.jspx.datasource.JspxDataSource" destroy="close" singleton="true">
    <string name="driverClass">${driverClassName}</string>
    <string name="jdbcUrl"><![CDATA[jdbc:postgresql://192.168.0.201:5433/jspxnet]]></string>
    <string name="user">${username}</string>
    <string name="password"><![CDATA[${password}]]></string>
    <int name="maxPoolSize">${maxPoolSize}</int>
    <int name="readWrite">1</int>
    </bean>

    <bean id="writeDataSource" class="com.jspx.datasource.JspxDataSource" destroy="close" singleton="true">
    <string name="driverClass">${driverClassName}</string>
    <string name="jdbcUrl"><![CDATA[jdbc:postgresql://192.168.0.201:5432/jspxnet]]></string>
    <string name="user">${username}</string>
    <string name="password"><![CDATA[${password}]]></string>
    <int name="maxPoolSize">${maxPoolSize}</int>
    <int name="readWrite">0</int>
    </bean>

    <bean id="jspxDataSource" class="com.jspx.datasource.JRWPoolDataSource" singleton="true">
    <list name="dataSources" class="ref">
    <value>readDataSource</value>
    <value>writeDataSource</value>
    </list>
    </bean>

    readWrite 0:表示只读数据库 1:表示读写数据库,JRWPoolDataSource中的数据源可以配置多个,这下性能强悍了吧!