数据库连接池
1. 池化技术?
2. 什么是数据库连接池?
3. 为什么使用数据库连接池?
4. 数据库连接池运行机制
5.连接池和线程池的关系
6.连接池设计要点
7. 连接池的具体实现
8.连接池连接设置数量
1. 池化技术?
2. 什么是数据库连接池?
3. 为什么使用数据库连接池?
3.1普通使用数据库时,需要首先建立TCP连接,账号、密码认证建立数据库连接,执行sql语句,关闭数据库连接,关闭TCP连接。这个步骤浪费时间与资源,可以把建立数据库的连接保存在一个连接容器内,需要执行任务时从连接容器内取出一个连接,任务完成时归还连接,就可以节省很多时间与资源。
优点:
- 降低了网络开销
- 连接复用,优先减少了连接数
- 提升性能,避免频繁的新建连接,新建连接的开销比较大
- 没有TIME_WAIT状态的问题
缺点:
设计较为复杂
3.2 长连接和连接池的区别
- 长连接是一些驱动、驱动框架、ORM工具的特性,由驱动来保持连接句柄的打开,一边后续的数据库操作可以重用连接,从而减少数据库的连接开销。
- 连接池是应用服务器的组件,它可以通过参数来配置连接数,连接检测、连接的生命周期等。
- 连接池内的连接,其实就是长连接。
4. 数据库连接池运行机制
- 从连接池获取或创建可用连接;
- 使用完毕之后,把连接返回给连接池;
- 在系统关闭前,断开所有连接并释放连接占用的系统资源;
5.连接池和线程池的关系
线程池是主动操作,主动执行任务,当任务队列不为空的时候从队列取任务取执行。
连接池是被动操作(类似内存池),池的对象被任务获取,执行完任务后归还。
6 .连接池设计要点
使用连接池需要预先建立数据库连接。
连接池设计思路:
- 连接到数据库,设计到数据库ip、端口、用户名、密码、数据库名字等;
- 连接的操作,每个连接对象都是独立的连接通道,它们是独立的;
- 配置最小连接数和最大连接数。
- 配置一个队列管理池的连接,比如list;
- 获取连接对象;connection_wait,notify
- 归还连接对象;
- 连接池的名字。
第一步:构造函数,赋值 pool_name,db_server_ip(mysql ip地址),db_server_port(mysql端口),username(mysql用户名),password(mysql用户密码),db_name(mysql数据库名称),max_conn_cnt(最大连接数)
第二步:int init()初始化,创建最小数量连接,把连接插入到空闲队列,创建一次来连接要经历三次握手和连接数据库的过程。
第三步: 请求获取连接
第四步:归还连接
第五步:释放资源
6.2 mysql连接重连机制
my_bool reconnect = true; mysql_options(m_mysql, MYSQL_OPT_RECONNECT, &reconnect); // 配合mysql_ping实现自动重连
int STDCALL mysql_ping(MYSQL *mysql);
7. 连接池的具体实现
8.连接池连接设置数量
连接池的连接数量一般与线程的数量是相等的。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 终于写完轮子一部分:tcp代理 了,记录一下
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理