文章目录

  • 简要
  • 原理
  • 优点
  • 注意要点
  • 1. 连接池中到底应该放置多少连接,才能使系统的性能最佳?
  • 2. 如何确保连接池中的最小连接数呢?
  • dbcp
  • 参数设置
  • c3p0
  • c3p0与dbcp区别
  • python-SQLalchemy
  • 使用用法
  • 参数设置



原文:

简要

  1. 最小连接数:是连接池一直保持的数据库连接,所以如果应用程序对数据库连接的使用量不大,将会有大量的数据库连接资源被浪费.
  2. 最大连接数:是连接池能申请的最大连接数,如果数据库连接请求超过次数,后面的数据库连接请求将被加入到等待队列中,这会影响以后的数据库操作
  3. 如果最小连接数与最大连接数相差很大:那么最先连接请求将会获利,之后超过最小连接数量的连接请求等价于建立一个新的数据库连接.不过,这些大于最小连接数的数据库连接在使用完不会马上被释放,他将被 放到连接池中等待重复使用或是空间超时后被释放.

原理

一个线程负责创建连接
另一个线程负责回收连接(针对c3p0)
连接放在一个列表里面进行缓冲,在这个list对连接进行管理

优点

  1. 减少创建时间
  2. 简化编程模式
  3. 减少资源占用时间

注意要点

1. 连接池中到底应该放置多少连接,才能使系统的性能最佳?

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

2. 如何确保连接池中的最小连接数呢?

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

dbcp

开源数据库连接池,配置方便

参数设置

MaxActive,连接池的最大数据库连接数。设为0表示无限制。maxActive是最大激活连接数,这里取值为20,表示同时最多有20个数据库连

maxIdle 连接池中最多可空闲maxIdle个连接,maxIdle是最大的空闲连接数,这里取值为20,表示即使没有数据库连接时依然可以保持20空闲的连接,而不被清除,随时处于待命状态

minIdle 连接池中最少空闲maxIdle个连接

initialSize 初始化连接数目

maxWait 连接池中连接用完时,新的请求等待时间,毫秒 MaxWait是最大等待秒钟数,这里取值-1,表示无限等待,直到超时为止,也可取值9000,表示9秒后超时。

maxIdle,最大空闲数,数据库连接的最大空闲时间。超过空闲时间,数据库连
接将被标记为不可用,然后被释放。设为0表示无限制。

c3p0

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

c3p0与dbcp区别

dbcp没有自动回收空闲连接的功能
c3p0有自动回收空闲连接功能

python-SQLalchemy

SQLalchemy类似与java的Hibernate, 他采用的对象映射概念。理解为数据的每一行均为一个对象。在创建表字段映射的时候,需要指定一个字段为主键。这个主键不一定是数据库里的主键,它可以重复。

同时SQLalchemy提供连接池的业务,可以完成连接的释放与获取。

使用用法

  1. create_engine 方法一开始创建的数据库池是空,需要通过connection进行创建。每当你创建一个连接,你调用engine.pool.status()就可以看到数据库连接池处于什么状态
  2. 调用session.connection()或者engine.connect(),从数据库池中拿连接,如果有闲着的连接就直接返回,没有闲着的就看下是否能创建连接(即数据库池满了),如果能就创建新连接,如果不能,则等待连接
  3. 调用Connection.close()释放连接,将数据库连接放回连接池,而不是真的关闭连接

参数设置

dialect+driver://username:password@host:port/db
dialect,是数据库类型,大概包括:sqlite, mysql, postgresql, oracle, or mssql.
driver,是使用的数据库API,驱动,连接包。
username,用户名
password,密码
host,网络地址,可以用ip,域名,计算机名。
port,数据库端口。
db,数据库名。