0 CHN 08 0 数据库 概述
Robert Huang edited this page 2023-02-12 11:25:32 +08:00
This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

English | 简体中文

概述

Drogon内置了数据库读写引擎对数据库连接的操作基于non-blocking I/O技术实现因此从底层到上层接口都是高效率的非阻塞异步方式保证了Drogon对高并发性能的追求。目前Drogon支持PostgreSQL和MySQL数据库如果要使用数据库开发系统必须先安装相应数据库的开发环境Drogon会自动探测这些库的头文件和库文件编译相应的部分。数据库开发环境的准备参见安装数据库环境

Drogon为了支持轻量级应用也支持sqlite3数据库通过线程池实现异步接口与前述数据库的接口是统一的。

客户端

Drogon的数据库基本操作对象是DbClient(这是一个抽象类,用户可以持有的是DbClient类型的智能指针,具体类型取决于构造它的接口),区别于一般的数据库接口,这个对象并不代表单一的数据库连接,它内部可以包含一个或多个数据库连接,你可以把它看作一个连接池对象

DbClient同时提供了同步和异步接口异步接口也同时支持阻塞和非阻塞的模式当然出于和Drogon异步框架配合的需要建议大家多使用异步接口的非阻塞模式这也是对提高并发性最有效的接口。

通常一个异步接口调用时DbClient会在它管理的空闲连接中随机选取一个执行相关的查询操作待有结果返回时DbClient会处理数据通过回调函数对象返回给调用方如果调用时没有空闲连接执行内容会被缓存一旦有连接执行完自己的sql请求就会从缓存中依次取出待执行的命令去执行。

DbClient的详细内容,见DbClient

事务

DbClient可以产生事务对象,用以支持事务操作,事务对象除了多出一个rollback()接口,其余基本和DbClient一致,事务对象的类是Transaction,关于事务的详细内容,参见事务

ORM

Drogon也提供了对ORM的支持用户可以通过drogon_ctl读取数据库中的表并生成对应的model对象类源码然后通过Mapper<MODEL>类模板完成这些对象的数据库操作为标准的数据操作提供了简单便捷的接口使用户可以不用自己写sql语句就可以完成对表的增删改查。关于ORM,请参阅ORM

08.1 DbClient