文章目录
- 简要
- 原理
- 优点
- 注意要点
- 1. 连接池中到底应该放置多少连接,才能使系统的性能最佳?
- 2. 如何确保连接池中的最小连接数呢?
- dbcp
- 参数设置
- c3p0
- c3p0与dbcp区别
- python-SQLalchemy
- 使用用法
- 参数设置
原文:
简要
- 最小连接数:是连接池一直保持的数据库连接,所以如果应用程序对数据库连接的使用量不大,将会有大量的数据库连接资源被浪费.
- 最大连接数:是连接池能申请的最大连接数,如果数据库连接请求超过次数,后面的数据库连接请求将被加入到等待队列中,这会影响以后的数据库操作
- 如果最小连接数与最大连接数相差很大:那么最先连接请求将会获利,之后超过最小连接数量的连接请求等价于建立一个新的数据库连接.不过,这些大于最小连接数的数据库连接在使用完不会马上被释放,他将被 放到连接池中等待重复使用或是空间超时后被释放.
原理
一个线程负责创建连接
另一个线程负责回收连接(针对c3p0)
连接放在一个列表里面进行缓冲,在这个list对连接进行管理
优点
- 减少创建时间
- 简化编程模式
- 减少资源占用时间
注意要点
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提供连接池的业务,可以完成连接的释放与获取。
使用用法
- create_engine 方法一开始创建的数据库池是空,需要通过connection进行创建。每当你创建一个连接,你调用engine.pool.status()就可以看到数据库连接池处于什么状态
- 调用session.connection()或者engine.connect(),从数据库池中拿连接,如果有闲着的连接就直接返回,没有闲着的就看下是否能创建连接(即数据库池满了),如果能就创建新连接,如果不能,则等待连接
- 调用Connection.close()释放连接,将数据库连接放回连接池,而不是真的关闭连接
参数设置
dialect+driver://username:password@host:port/db
dialect,是数据库类型,大概包括:sqlite, mysql, postgresql, oracle, or mssql.
driver,是使用的数据库API,驱动,连接包。
username,用户名
password,密码
host,网络地址,可以用ip,域名,计算机名。
port,数据库端口。
db,数据库名。