本文章介绍池化技术,连接池原理与实现
池化技术能够减少资源对象的创建次数,提高程序的相应性能,特别是在高并发下。常用于
1对象创建时间长
2 对象创建需要大量资源
3 对象创建后可重复使用
数据库连接池:
1 定义:程序启动时建立足够的数据库连接,并将这些连接组成一个连接池,由程序动态的对池中的连接进行申请,使用,释放。
2 优点:
1 资源复用:
避免了频繁的创建,释放连接引起的性能开销等
2 更快的系统响应速度:
程序启动时候,往往已经创建了若干连接至于池中,但连接到来时候,初始化已完成。对于业务请求处理而言,直接利用现有的可用连接,避免连接初始化和释放过程。
3 统一的连接管理,避免数据库连接泄露:
完善的连接池设计中,可根据预先的连接暂用超时设定,强制收回被占用连接。避免资源泄露。
3 使用连接池与未使用连接池流程对比:
未使用
1.TCP建⽴连接的三次握⼿(客户端与MySQL服务器的连接基于TCP协议)2.MySQL认证的三次握⼿
3.真正的SQL执⾏
4.MySQL的关闭
5.TCP的四次握⼿关闭
使用
程序启动时,需要创建连接和初始化连接等,后面请求就不用在建立连接等操作了
4 长连接和连接池的区别
连接池是应用服务器的组件,它可以通过参数来配置连接数,连接检查,连接生命周期等。
5 数据库连接池运行机制:
1 从连接池获取或创建可用连接(请求)
2 使用完毕后,把连接返回给连接池(归还)
3 系统关闭前,断开所有连接并释放连接占用的系统资源
具体流程:
6 连接池和线程池的关系
线程池:主动调用任务
连接池:被动被任务使用
连接池和线程池设置数量的关系:
a. 一般线程池线程数量和连接池连接对象数量一致
b. 一般线程执行任务完毕的时候归还连接对象
7 连接池设计要点:
使用连接池需要预先建立数据库连接
线程池设计思路:
1.连接到数据库,涉及到数据库ip、端⼝、⽤户名、密码、数据库名字等;
a.连接的操作,每个连接对象都是独⽴的连接通道,它们是独⽴的4数据 \n
b.配置最⼩连接数和最⼤连接数
2.需要⼀个队列管理他的连接,⽐如使⽤list;
3.获取连接对象:
4.归还连接对象
8 连接池连接设置数量
连接数=((核⼼数2)+有效磁盘数)按照这个公式,即是说你的服务器CPU是4核i7的,那连接池连接数⼤⼩应该为((42)+1)=9这⾥只是⼀个经验公式。还要和线程池数量以及具体业务结合在⼀起
连接池代码设计与实现
CDBConn连接类,CDBPool管理连接类(管理CDBConn);当然也可以添加一个Pool管理类(可能应用程序会有多个连接池)。
CDBConn连接类:
class CDBConn {
public:
CDBConn(CDBPool* pDBPool);
virtual ~CDBConn();<