MySQL数据库连接池

一. 什么是数据库连接池

官方:数据库连接池(Connection pooling)是程序启动时建立足够的数据库连接,并将这些连接组成一个连接池,由程序动态地对连接池中的连接进行申请,使用,释放。

理解:创建数据库连接池是一个很耗时的操作,也容易对数据库造成安全隐患。所以,在程序初始化的时候,集中创建多个数据库连接池,并把他们集中管理,供程序使用,可以保证较快的数据库读写速度,还更加的安全可靠。

二. 传统的连接池机制与数据库连接池的运行机制区别

传统链接:一般来说,JAVA应用程序访问数据库的过程:

1) 装载数据库驱动程序;

2) 通过JDBC建立数据库连接;

3) 访问数据库,执行SQL语句;

4) 断开数据库连接;

使用了数据库连接池的机制:

1) 程序初始化时创建连接池;

2) 使用时向数据库申请可用连接;

3) 使用完毕,将连接返回给连接池;

4) 程序退出时,断开所有连接,并释放资源;

三. 为何要使用数据库连接池

假设网站一天有很大的访问量,数据库服务器就需要为每次连接创建一次数据库连接,极大的浪费数据库资源,并且极易造成数据库服务器内存溢出,拓机。

数据库连接池是一种关键的有限的昂贵的资源,这一点在多用户的网页程序中体现的尤为突出,对数据库连接的管理显著影响到整个应用程序的伸缩性和健壮性,影响程序的性能指标,数据库连接池正式针对这个问题提出的。数据库连接池负责分配,管理和释放数据库的连接,它允许应用程序重复使用一个现有的数据库连接,而不是重建一个。

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

数据库连接池的最小连接数和最大连接数的设置要考虑以下几个因素:

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

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

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

四. 使用数据库连接池的关键点

1.并发问题

为了使连接池管理服务具有最大的通用性,必须考虑多线程环境,这个问题相对于好解决,因为各个语言自身提供了对于并发管理的支持,可以保证线程的同步。

2. 事务处理

DB连接池必须要确保某一时间内一个connection只能分配给一个线程。不同conection的事务是相互独立的。

我们知道,事务具有原子性,此时要求对数据库的操作符合原子操作:要么不做,要么全做。

我们知道当2个线程共用一个连接Connection对象,而且各自都有自己的事务要处理的时候,对于连接池 是一个很头疼的问题,因为即使Connection类提供了相应的事务支持,可是我们仍然不能确定那个数据库操作是对应那个事务的,这是由于我们有两个线程都在进行事务操作而引起的,为此我们可以使用每一个事物独占一个连接来实现,虽然这种方法有点浪费连接池资源但是可以大大降低事物管理的复杂性。

3. 连接池的分配与释放

连接池的分配与释放,对系统的性能有很大的影响。合理的分配与释放,可以提高连接的复用性,从而降低建立连接的开销,同时还可以加快用户的访问速度。

对于连接的管理可使用一个list,即把已经创建的连接都放入list中去同一管理。每当用户请求一个连接时,系统检查这个list中有没有可以分配的连接。如果有,就会把那个最合适的连接分配给他;如果没有就会抛出一个异常给用户,list中连接是否可以被分配有一个线程来专门管理稍后我会介绍这个线程的具体实现。

4. 连接池的配置与维护

连接池到底该放置多少连接,才能使系统的性能最佳?系统可采取设置最小连接数和最大连接数等参数来控制连接池中的连接。

比如说,最小连接数是系统启动时连接池所创建的连接数。如果创建过多,则系统启动就慢,但创建后系统的响应速度会很快;如果创建过少,则系统的启动很快,响应却慢,这样,在开发时,设置较小的连接池数,开发起来会快,而在系统实际使用时设置较大的,因为这样对访问客户来说速度会快些。最大连接数是连接池中允许连接的最大数目,具体设置多少,要看系统的访问量,可通过软件需求得到。

如何确保连接池中的最小连接数?有动态和静态两种策略。动态即每隔一段时间就对连接池进行检查,如果发现连接数量小于最小连接数,则补充相应数量的新连接,以保证连接池的正常运转。静态是发现空闲连接不够时再去检查。

五. 使用连接池的优势

连接池用于创建和管理数据库连接的缓冲池技术,缓冲池中的连接可以被任何需要他们的线程使用。当一个线程需要用JDBC对一个数据库操作时,将从池中请求一个连接。当这个连接使用完毕后,将返回到连接池中,等待为其他线程服务。

连接池主要只有以下三个方面的优势:

第一、 减少创建连接的时间。连接池中的连接是已准备好的,可重复使用的,获取后可以直接访问数据库,因此减少了连接创建的次数和时间。

第二、 简化的变成方式。当使用连接池时,每一个单独的线程能够像创建一个自己的JDBC连接一样操作,允许用户直接使用的次数和时间。

第三、 控制资源的使用。 如果不使用连接池,每次访问数据库都需要创建一个连接,这样系统的稳定性受系统连接需求影响很大,很容易产生资源浪费和高负载异常。连接池能够使性能最大化,将资源利用控制在一定的水平下。连接池能控制池中的连接数量,增强了系统在大量用户应用时的稳定性。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值