文档章节

数据库连接池

LYQ1990
 LYQ1990
发布于 2016/04/21 14:20
字数 1712
阅读 13
收藏 0

 

数据库连接池(常用):
1、Druid(阿里巴巴开源)
2、C3p0
3、DBCP

 一、背景

数据库连接池负责分配、管理和释放数据库连接,它允许应用程序重复使用一个现有的数据库连接,而不是再重新建立一个;释放空闲时间超过最大空闲时间的数据库连接来避免因为没有释放数据库连接而引起的数据库连接遗漏。这项技术能明显提高对数据库操作的性能。

数据库连接是一种关键的、有限的、昂贵的资源,这一点在多用户的网页应用程序中体现得尤为突出。对数据库连接的管理能显著影响到整个应用程序的伸缩性和健壮性,影响到程序的性能指标。数据库连接池正是针对这个问题提出来的。

二、影响因素 

数据库连接池在初始化时将创建一定数量的数据库连接放到连接池中,这些数据库连接的数量是由最小数据库连接数制约。无论这些数据库连接是否被使用,连接池都将一直保证至少拥有这么多的连接数量。连接池的最大数据库连接数量限定了这个连接池能占有的最大连接数,当应用程序向连接池请求的连接数超过最大连接数量时,这些请求将被加入到等待队列中。数据库连接池的最小连接数和最大连接数的设置要考虑到下列几个因素:

1. 最小连接数

是连接池一直保持的数据库连接,所以如果应用程序对数据库连接的使用量不大,将会有大量的数据库连接资源被浪费。

2. 最大连接数

是连接池能申请的最大连接数,如果数据库连接请求超过此数,后面的数据库连接请求将被加入到等待队列中,这会影响之后的数据库操作。

3. 最小连接数与最大连接数差距

最小连接数与最大连接数相差太大,那么最先的连接请求将会获利,之后超过最小连接数量的连接请求等价于建立一个新的数据库连接。不过,这些大于最小连接数的数据库连接在使用完不会马上被释放,它将被放到连接池中等待重复使用或是空闲超时后被释放。

 

三、原理

 

连接池基本的思想是在系统初始化的时候,将数据库连接作为对象存储在内存中,当用户需要访问数据库时,并非建立一个新的连接,而是从连接池中取出一个已建立的空闲连接对象。使用完毕后,用户也并非将连接关闭,而是将连接放回连接池中,以供下一个请求访问使用。而连接的建立、断开都由连接池自身来管理。同时,还可以通过设置连接池的参数来控制连接池中的初始连接数、连接的上下限数以及每个连接的最大使用次数、最大空闲时间等等。也可以通过其自身的管理机制来监视数据库连接的数量、使用情况等。

 

四、Java连接池

 

在Java中开源的数据库连接池有以下几种 :

1、C3P0:是一个开放源代码的JDBC连接池,它在lib目录中与Hibernate  一起发布,包括了实现jdbc3和jdbc2扩展规范说明的Connection 和Statement 池的DataSources 对象。

2、Proxool:是一个Java SQL Driver驱动程序,提供了对选择的其它类型的驱动程序的连接池封装。可以非常简单的移植到现存的代码中,完全可配置,快速、成熟、健壮。可以透明地为现存的JDBC驱动程序增加连接池功能。

3、Jakarta DBCP:DBCP是一个依赖Jakartacommons-pool对象池机制的数据库连接池。DBCP可以直接的在应用程序中使用。

4、DDConnectionBroker:是一个简单、轻量级的数据库连接池。

5、DBPool:是一个高效、易配置的数据库连接池。它除了支持连接池应有的功能之外,还包括了一个对象池,使用户能够开发一个满足自己需求的数据库连接池。

6、XAPool:是一个XA数据库连接池。它实现了javax.sql.XADataSource并提供了连接池工具。

7、Primrose:是一个Java开发的数据库连接池。当前支持的容器包括Tomcat4&5、Resin3与JBoss3。它同样也有一个独立的版本,可以在应用程序中使用而不必运行在容器中。Primrose通过一个WEB接口来控制SQL处理的追踪、配置,以及动态池管理。在重负荷的情况下可进行连接请求队列处理。

8、SmartPool:是一个连接池组件,它模仿应用服务器对象池的特性。SmartPool能够解决一些临界问题如连接泄漏(connection leaks)、连接阻塞、打开的JDBC对象(如Statements、PreparedStatements)等。SmartPool的特性包括:

·         支持多个pool

·         自动关闭相关联的JDBC对象

·         在所设定time-outs之后察觉连接泄漏

·         追踪连接使用情况

·         强制启用最近最少用到的连接

·         把SmartPool“包装”成现存的一个pool

9、MiniConnectionPoolManager:是一个轻量级JDBC数据库连接池。它只需要Java1.5(或更高)并且没有依赖第三方包。

10、BoneCP:是一个快速、开源的数据库连接池。帮用户管理数据连接,让应用程序能更快速地访问数据库。比C3P0/DBCP连接池速度快25倍。

11、Druid:Druid不仅是一个数据库连接池,还包含一个ProxyDriver、一系列内置的JDBC组件库、一个SQL Parser。

支持所有JDBC兼容的数据库,包括Oracle、MySql、Derby、Postgresql、SQL Server、H2等。

Druid针对Oracle和MySql做了特别优化,比如:

·         Oracle的PS Cache内存占用优化

·         MySql的ping检测优化

Druid提供了MySql、Oracle、Postgresql、SQL-92的SQL的完整支持,这是一个手写的高性能SQL Parser,支持Visitor模式,使得分析SQL的抽象语法树很方便。

简单SQL语句用时10微秒以内,复杂SQL用时30微秒。

通过Druid提供的SQL Parser可以在JDBC层拦截SQL做相应处理,比如说分库分表、审计等。Druid防御SQL注入攻击的WallFilter,就是通过Druid的SQL Parser分析语义实现的

 

© 著作权归作者所有

上一篇: Mysql存储引擎
LYQ1990
粉丝 9
博文 238
码字总数 206220
作品 0
东城
私信 提问
JDBC Item5: 数据库连接池

一、应用程序直接获取数据库连接的缺点   用户每次请求都需要向数据库获得链接,而数据库创建连接通常需要消耗相对较大的资源,创建时间也较长。假设网站一天10万访问量,数据库服务器就需...

_Roger_
2016/01/27
44
0
JDBC--数据库连接池

一、数据库连接池 (1)JDBC数据库连接池的必要性 在使用开发基于数据库的web程序时,传统的模式基本是按以下步骤:   在主程序(如servlet、beans)中建立数据库连接。 进行sql操作 断开数...

大道无名
2016/07/02
109
0
关于ADO.NET连接池

前几天同事问我一个问题,一种CS架构的程序,直接把SQL Server作为服务端,每个客户端直接连接数据库操作,如果客户端打开的数量过多时SQL Server的连接数将会特别高,数据库端形成性能瓶颈,...

浣熊干面包
2012/01/12
0
0
基于MysqlConnector/C++的数据库连接池的实现

1.连接池的介绍: 1.1应用背景: 一般的应用程序都会访问到数据库,在程序访问数据库的时候,每一次数据访问请求都必须经过下面几个步骤:建立数据库连接,打开数据库,对数据库中的数据进行...

barsoom
2013/01/24
0
0
java jdbc连接数据库的

1、封装数据库连接 2、创建dao层接口 3、实现dao层接口 4、使用事务 (1)当Jdbc程序向数据库获得一个Connection对象时,默认情况下这个Connection对象会自动向数据库提交在它上面发送的SQL...

红焖鲤鱼
2016/12/07
35
0

没有更多内容

加载失败,请刷新页面

加载更多

CAP和BASE理论

CAP和BASE理论 CAP理论和BASE理论是分布式系统的“基石”,论述了分布式系统的能力边界。 CAP理论 CAP理论指出对于一个分布式数据存储系统中,不可能同时满足以下三点: 一致性(Consistency...

陶小陶
16分钟前
2
0
库克称未来十年这项技术非常重要

苹果全球WWDC奖学金得主小型交流会召开,此次交流会共有来自全球的12名WWDC19奖学金获得者参与,其中有两名中国开发者。两名年轻的中国学生在自己的应用设计中都利用了苹果的ARKit工具,通过...

linuxCool
26分钟前
3
0
使用Navicat连接阿里云服务器宝塔面板里创建的数据库

今天试着使用了Navicat去连接阿里云轻量服务器的数据库,报10060错误,解决方法如下: 数据库设置【权限】为 “所有人”,之后进行下一步的设置: 在宝塔的【安全】选项 -> 【防火墙】->放行...

htdp
28分钟前
1
0
git强制覆盖本地命令

git强制覆盖: git fetch --all git reset --hard origin/master git pull git强制覆盖本地命令(单条执行): git fetch --all && git reset --hard origin/master && git pull...

chenhongjiang
42分钟前
2
0
10分钟详解Spring全家桶7大知识点

Spring框架自诞生以来一直备受开发者青睐,有人亲切的称之为:Spring 全家桶。它包括SpringMVC、SpringBoot、Spring Cloud、Spring Cloud Dataflow等解决方案。 很多研发人员把spring看作心目...

peakedness丶
43分钟前
1
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部