连接池技术和数据库事务文档1031要点Word文档下载推荐.docx

上传人:b****5 文档编号:20013897 上传时间:2023-01-15 格式:DOCX 页数:22 大小:39.79KB
下载 相关 举报
连接池技术和数据库事务文档1031要点Word文档下载推荐.docx_第1页
第1页 / 共22页
连接池技术和数据库事务文档1031要点Word文档下载推荐.docx_第2页
第2页 / 共22页
连接池技术和数据库事务文档1031要点Word文档下载推荐.docx_第3页
第3页 / 共22页
连接池技术和数据库事务文档1031要点Word文档下载推荐.docx_第4页
第4页 / 共22页
连接池技术和数据库事务文档1031要点Word文档下载推荐.docx_第5页
第5页 / 共22页
点击查看更多>>
下载资源
资源描述

连接池技术和数据库事务文档1031要点Word文档下载推荐.docx

《连接池技术和数据库事务文档1031要点Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《连接池技术和数据库事务文档1031要点Word文档下载推荐.docx(22页珍藏版)》请在冰豆网上搜索。

连接池技术和数据库事务文档1031要点Word文档下载推荐.docx

正式项目中任何功能必须使用连接池。

对于共享资源,有一个很著名的设计模式:

资源池(ResourcePool)。

该模式正是为了解决资源的频繁分配﹑释放所造成的问题。

为解决上述问题,可以采用数据库连接池技术。

数据库连接池的基本思想就是为数据库连接建立一个“缓冲池”。

预先在缓冲池中放入一定数量的连接,当需要建立数据库连接时,只需从“缓冲池”中取出一个,使用完毕之后再放回去。

我们可以通过设定连接池最大连接数来防止系统无尽的与数据库连接。

更为重要的是我们可以通过连接池的管理机制监视数据库的连接的数量﹑使用情况,为系统开发﹑测试及性能调整提供依据。

连接池的基本工作原理见下图。

2.4.连接池带来的性能提升和安全性

性能比较(连接耗时——通过不断循环n次获取连接和释放连接)

连接次数

分类

10

20

30

40

50

100

连接池

343ms

345ms

335ms

338ms

336ms

337ms

创建连接

594ms

1165ms

1875ms

2291ms

2895ms

6179ms

安全性

可以控制创建出来的数据库连接数,并管理好这些连接,在某个连接超过最大空闲时间时,连接池可以将这个连接交还给数据库,防止数据的崩溃;

若连接数小于最小连接数则新建一个新的连接到连接池中,保证连接池中有最小连接数。

同时还可以防止应用因为无限创建连接造成巨大的资源开销。

2.5.连接池可能有的副作用

(1)连接池的连接数达到最大连接数时,则不能再创建新的连接,需要等待其他连接的释放才能获取到连接。

(2)假如调用的连接没有及时释放回连接池中去,而连接池中没有空闲的连接时,连接池就需要去创建新的连接,当达到最大连接数时,就会发生

(1)的情况,所以在项目开发过程中,要注意及时地将用完结束的连接释放到连接池中去。

(3)使用连接池时,要根据项目需求配置好合理的初始连接数和最大连接数,初始连接数太小,对于高并发的访问空闲连接数不足时需要去创建新的连接,这样换来的代价高。

初始连接数太大,启动初始化时时间比较长,而项目不需要这么多连接,造成资源浪费。

2.6.几种连接池的对比

在项目中有可能用到的开源的连接池主要有DBCP、c3p0、proxool和BoneCP,还有其他的开源连接池还有DDConnectionBroker、DBPoo、XAPool、Primrose、SmartPool等。

下面主要是DBCP、c3p0、proxool和BoneCP这四个开源连接池的比较。

1.DBCP连接池

DBCP可能是使用最多的开源连接池,原因大概是因为配置方便,而且很多开源和tomcat应用例子都是使用的这个连接池吧。

这个连接池可以设置最大和最小连接,连接等待时间等,基本功能都有。

使用评价:

在具体项目应用中,发现此连接池的持续运行的稳定性还是可以,不过速度稍慢,在大并发量的压力下稳定性有所下降,此外不提供连接池监控。

配置:

需要导入的包:

commons-dbcp.jar和commons-pool.jar(或者用tomcat-dbcp.jar一个包就行)以及数据库驱动包(下略。

其中oracle为classes12.jar;

mysql为mysql-connector-java-5.0.8-bin.jar等)

applicationContext.xml中配置如下:

<

!

--dbcp数据源-->

beanname="

dbcp_dataSource"

class="

mons.dbcp.BasicDataSource"

destroy-method="

close"

>

<

propertyname="

driverClassName"

value="

oracle.jdbc.driver.OracleDriver"

/>

url"

jdbc:

oracle:

thin:

@127.0.0.1:

1521:

orcl"

/>

username"

password"

maxIdle"

20"

maxActive"

50"

/bean>

(主页:

http:

//commons.apache.org/dbcp/)

2.c3p0连接池

c3p0是另外一个开源的连接池,在业界也是比较有名的,这个连接池可以设置最大和最小连接,连接等待时间等,基本功能都有。

在具体项目应用中,发现此连接池的持续运行的稳定性相当不错,在大并发量的压力下稳定性也有一定保证,此外不提供连接池监控。

c3p0有自动回收空闲连接功能,连接池解决了dbcp无法自动重连问题。

c3p0-0.9.1.2.jar(这个包本身导入spring库的时候就已经导入)以及数据库驱动包。

--c3p0数据源-->

c3p0_dataSource"

com.mchange.v2.c3p0.ComboPooledDataSource"

driverClass"

/property>

user"

jdbcUrl"

value="

maxPoolSize"

minPoolSize"

10"

3.Proxool连接池

Proxool这个连接池可能用到的人比较少,但也有一定知名度,这个连接池可以设置最大和最小连接,连接等待时间等,基本功能都有。

在具体项目应用中,发现此连接池的持续运行的稳定性有一定问题,有一个需要长时间跑批的任务场景任务,同样的代码在其他的开源连接池中成功结束,但在Proxool中出现异常退出。

但是Proxool有一个优势--连接池监控。

proxool-0.9.1.jar和proxool-cglib.jar以及数据库驱动包。

配置方法一:

与其他连接池的配置类似,直接在applicationContext.xml中配置:

--proxool数据源-->

--跟dbcp/c3p0一样单独的配置-->

--连接池配置成功,但这种做法监听没办法起来(可能未配置成功)-->

beanid="

proxool_dataSource_1"

class="

org.logicalcobwebs.proxool.ProxoolDataSource"

alias"

usernameDb"

driver"

value="

driverUrl"

maximumConnectionCount"

minimumConnectionCount"

houseKeepingTestSql"

select1fromdual"

配置方法二:

在WebRoot/WEB-INF下新建一个proxool.xml文件,内容如下:

?

xmlversion="

1.0"

encoding="

UTF-8"

something-else-entirely>

proxool>

<

alias>

usernameDb<

/alias>

driver-url>

orcl<

/driver-url>

driver-class>

oracle.jdbc.driver.OracleDriver<

/driver-class>

driver-properties>

<

/driver-properties>

maximum-connection-count>

30<

/maximum-connection-count>

minimum-connection-count>

10<

/minimum-connection-count>

house-keeping-test-sql>

select1fromdual<

/house-keeping-test-sql>

/proxool>

/something-else-entirely>

在web.xml中调用proxool.xml,配置如下:

--引入proxool配置文件-->

servlet>

servlet-name>

proxoolServletConfigurator<

/servlet-name>

servlet-class>

org.logicalcobwebs.proxool.configuration.ServletConfigurator<

/servlet-class>

init-param>

--以xml文件方式引入-->

param-name>

xmlFile<

/param-name>

--xml文件存放目录-->

param-value>

WEB-INF/proxool.xml<

/param-value>

/init-param>

load-on-startup>

1<

/load-on-startup>

/servlet>

在applicationContext.xml中的配置如下:

--与proxool.xml和web.xml里结合使用-->

--连接池配置成功,监听也可以起来-->

proxool_dataSource_2"

org.springframework.jdbc.datasource.DriverManagerDataSource"

org.logicalcobwebs.proxool.ProxoolDriver"

--proxool.xml文件中proxool结点的别名(alias)为usernameDb-->

proxool.usernameDb"

由于proxool连接可以对连接池进行监控,在web.xml中配置

proxoolAdmin<

org.logicalcobwebs.proxool.admin.servlet.AdminServlet<

servlet-mapping>

url-pattern>

/proxoolAdmin<

/url-pattern>

/servlet-mapping>

通过访问proxoolAdmin即可监控连接池的情况

4.BoneCP连接池

BoneCP是一个快速,开源的数据库连接池,可以设置最大和最小连接,连接等待时间等,基本功能都有。

BoneCP连接池帮你管理数据连接让你的应用程序能更快速地访问数据库,比c3p0/DBCP连接池快25倍,并且有自动连接验证和自动重播任何失败的交易的能力(数据库/网络出现故障等情况下),但它的持续运行的稳定性有一定问题。

bonecp-0.7.1-rc1.jar、guava-r07.jar、slf4j-api-1.5.8.jar和slf4j-log4j12-1.5.8.jar(这些包从官网上下载下来的时候是zip压缩包,将拓展名改为jar就可以了)以及数据库驱动包。

--BoneCP数据源-->

boneCP_dataSource"

com.jolbox.bonecp.BoneCPDataSource"

maxConnectionsPerPartition"

30"

minConnectionsPerPartition"

总结:

综上所述,这几种开源连接池各有优劣,看了网络上很多评论,大都推荐使用DBCP和c3p0,经检验这种连接池性能稳定,承压能力强。

而Proxool尽管有明显的性能问题,但由于它具备监控功能,因此建议在开发测试时使用,有助于确定是否有连接没有被关掉,可以排除一些代码的性能问题。

BoneCP拥有很高的性能,但是稳定性有一定问题。

另外,各连接池配置常用的一些参数比较如下(参考网址:

DBCP

c3p0

proxool

boneCP

数据库用户名称

Username

User

username

数据库密码

Password

password

驱动名称

DriverClassName

DriverClass

driver-class

driverClass

Jdbc连接串

Url

JdbcUrl

driver-url

jdbcUrl

初始化大小

InitialSize

InitialPoolSize

连接池最小空闲

MinIdle

MinPoolSize

minimum-connection-count

minConnectionsPerPartition

连接池最大空闲

MaxIdle

连接池最大使用连接数量

MaxActive

MaxPoolSize

maximum-connection-count

maxConnectionsPerPartition

最小逐出时间

MinEvictableIdleTimeMillis

maxIdleTime

house-keeping-sleep-time

获取连接时测试是否有效

TestOnBorrow

TestConnectionOnCheckout

test-before-use

归还连接时是否测试有效

TestOnReturn

TestConnectionOnCheckin

test-after-use

连接空闲时测试是否有效

TestWhileIdle

获取连接最大等待时间

maxWait

性能比较,模拟A个线程循环B次并发访问数据库对比:

(网络参考数据,参考网址:

并发数

10A10B

1188ms

953ms

1625ms

63ms

20A10B

1204ms

1000ms

1640ms

110ms

30A10B

1250ms

1047ms

1657ms

156ms

50A10B

1406ms

1343ms

1843ms

172ms

100A10B

1641ms

2703ms

2031ms

532ms

200A10B

2093ms

4891ms

2406ms

936ms

500A10B

3219ms

11703ms

3343ms

1922ms

1000A10B

5187ms

12563ms

4703ms

3610ms

3000A10B

14094ms

16297ms

11344ms

11391ms

5000A10B

23610ms

22032ms

20125ms

17125ms

现在主流的连接池不多,一般选择主流,因为他有很多人共同发现问题,共同调优,并且版本在跟进。

DBCP和C3P0一般是选择最多的。

因为连接池性能本身已经挺高了。

所以如果不是极端情况,并不过分关心性能。

而他们最主要的区别是。

如果某个连接断掉(比如网络不稳定),C3P0会一直等待到超时,如果这期间恢复了连接,他就平滑过渡。

这个特性也不一定就算好事,如果页面访问量大,这个特性可能导致页面等待多了,发生拒绝访问。

根据项目需要选用。

另外hibernate3早期,因为DBCP的BUG而放弃对DBCP的支持。

现在这个BUG应该不需要太过在意。

但是配置的时候,请参考阮杰锋在JIRA上记载的经验。

但如果我们使用专业服务器。

比如weblogic或websphere的时候。

他们自带连接池,而且他们操作图形化,非常方便的调优和监控,往往也能带来便利。

不过这些服务器要钱,只有项目中允许,才能使用。

--数据源-->

dataSource"

destroy-method="

us

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 法律文书 > 辩护词

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1