五、数据库连接池解析与编写 —— TinyWebServer

数据库连接池解析与编写 —— TinyWebServer

一、前言

需要了解以下几个问题。数据库连接池也就迎刃而解了。
TinyWebServer/CGImysql

  1. 数据库连接池是什么?作用是什么?
  2. 为什么在编写的过程中要使用单例模式?
  3. 什么是RAII?

二、问题回答

Ⅰ、数据库连接池是什么?作用是什么?

  • 是什么: 池是一组资源的集合,这组资源在服务器启动之初就被完全创建好并初始化。通俗来说,池是资源的容器,本质上是对资源的复用。

  • 作用: 当系统开始处理客户请求的时候,如果它需要相关的资源,可以直接从池中获取,无需动态分配; 当服务器处理完一个客户连接后,可以把相关的资源放回池中,无需执行系统调用释放资源。

    • 简单来说提升效率,把创建数据库连接的时间拿到用户使用之前。

Ⅱ、 为什么在编写的过程中要使用单例模式?

  • 资源效率: 创建和维护数据库连接池的多个实例可能会占用大量资源。 单例确保仅创建一个连接池实例并在整个应用程序中共享,从而减少资源消耗。

  • 全局访问: 通过使用单例模式,您可以提供对连接池的全局访问点。 这可以使应用程序的不同部分更轻松地一致地访问池并有效地管理数据库连接。

  • 一致性: 单例确保您在整个应用程序中拥有单个、一致的连接池实例。 这有助于防止与具有不同配置或状态的池的多个实例相关的问题。

  • 线程安全: 数据库连接通常在多线程应用程序中的多个线程之间共享。 使用单例模式可以帮助管理对连接池的并发访问,确保线程安全并避免竞争条件。

  • 配置管理: 单例模式可以集中数据库连接池的配置,从而更容易在一处更改设置或连接参数。

  • 连接池生命周期: 管理连接池的生命周期,例如在应用程序启动时初始化它并在应用程序关闭时清理它,可以使用单例模式来简化。

Ⅲ、RAII

点击主页查看前几期

三、代码编写

Ⅰ、数据库连接池

  • 成员变量:

    • 数据库相关: 主机地址、数据库端口号、登陆数据库用户名、登陆数据库密码、使用数据库名
    • 日志: 日志开关
    • 连接池相关: 最大连接数、当前已使用的连接数、当前空闲的连接数、连接池、锁、信号量
  • 成员函数:

    • 构造函数、析构函数
    • 初始化
    • 获得连接、获得连接数、释放连接、销毁连接

四、下期预告

线程池的编写与解析

五、最后

创作不易!求赞!

你可能感兴趣的:(数据库,linux,服务器,ubuntu,经验分享,c++,后端)