<svg xmlns="http://www.w3.org/2000/svg" style="display: none;"> <path stroke-linecap="round" d="M5,0 0,2.5 5,5z" id="raphael-marker-block" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);"></path> </svg>
讯享网
- 在魔兽世界中数据库使用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 转义。
- 保持连接活跃:
- :保持数据库连接活跃,防止服务器断开与我们的连接。
调试和警告
- :在调试模式下,可以通过 方法设置是否警告同步查询。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/147747.html