- 在魔兽世界中数据库使用mysql来存储,并且数据库模块是直接嵌入在server中,并没有单独的DB server
- 有两种连接池,一种是同步,一种是异步
- 连接池相关源码目录: TrinityCore-mastersrcserverdatabaseDatabase
- 连接池具体文件: DatabaseWorkerPool.h DatabaseWorkerPool.cpp
连接池中的一些类
- 是一个模板类,提供了四个类,代表魔兽世界四个数据库连接池
异步连接池类型
同步连接池类型
线程池任务队列
连接池(同步连接池和异步连接池用这一个),异步连接池下标为0,同步连接池下标为1.
存储数据库信息
:预加载sql语句数量,与业务有关,实现存储的sql语句
:异步线程池的线程数量
:同步线程池的线程数量
初始化构造函数
创建连接池对象以及清零线程池数量
析构函数
SetConnectionInfo 设置数据库信息以及连接池数量
创建一条指定的连接
open 初始化连接池
初始化连接池,生成指定数量的同步和异步mysql连接加入连接池
close 关闭连接
关闭所有的同步连接以及异步连接
GetFreeConnection获取一条空闲连接
DatabaseWorkerPool.h
头文件包含和模板参数
- 头文件包含:
- 包含了必要的头文件,如 , , 和 ,这些文件可能定义了数据类型和一些通用函数。
- 使用了 STL 库如 , , 和 。
- 模板参数:
- :由于 是一个模板类,因此可以为不同的数据库连接类型提供通用接口。
私有成员与公共接口
- 私有成员:
- :一个枚举类,用于指定连接池的类型(异步和同步连接)。
- :一个智能指针,指向任务队列,使用生产者-消费者模型处理 SQL 操作。
- :存储同步和异步数据库连接的向量数组。
- : 存储数据库连接信息的智能指针。
- : 用于存储预先加载的 SQL 语句数量的向量。
- 和 : 记录异步和同步的线程数量。
主要功能
- 构造与析构:
- :构造函数,用于初始化对象。
- :析构函数,用于清理资源。
- 连接信息与管理:
- :设置数据库连接的信息和线程数量。
- :初始化连接池,生成指定数量的连接。
- :销毁连接池中的所有连接。
- 执行 SQL 操作:
- :将 SQL 语句排入任务队列以进行异步执行。
- :同步执行 SQL 语句,调用线程将被阻塞,直到执行完成。
- :执行 SQL 查询并返回结果,阻塞模式。
- 预处理语句:
- :准备所有预处理语句,以备后续使用。
- :获取指定索引的预处理语句。
- 事务管理:
- :开始一个新的事务。
- :提交事务。
- 异步与同步查询:
- 和 :提供异步方式处理查询与事务的功能。
辅助方法
- 字符串转义:
- :用于对字符串进行 SQL 转义。
- 保持连接活跃:
- :保持数据库连接活跃,防止服务器断开与我们的连接。
调试和警告
- :在调试模式下,可以通过 方法设置是否警告同步查询。
版权声明:
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若内容造成侵权、违法违规、事实不符,请将相关资料发送至xkadmin@xkablog.com进行投诉反馈,一经查实,立即处理!
转载请注明出处,原文链接:https://www.xkablog.com/rfx/54621.html