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