说明 | 管理SQL数据库连接,为需要数据库功能的模块提供支持 |
---|---|
状态 | 扩展(E) |
模块名 | dbd_module |
源文件 | mod_dbd.c |
兼容性 | Version 2.1 及以后的版本中可用 |
mod_dbd
使用apr_dbd管理管理SQL数据库连接。它为需要数据库功能的模块提供了数据库连接支持,并且负责管理数据库,从而为线程和非线程型的MPM提供了最佳的性能和可伸缩性。
这个模块根据不同的平台以优化的方式管理数据库连接。在非线程平台上,它使用经典的LAMP(Linux, Apache, Mysql, Perl/PHP/Python)方式提供持久连接。在线程化的平台上,它提供了更具伸缩性和更加有效的连接池,在一篇ApacheTutor文章中有相关描述。mod_dbd
取代了那篇文章中的模块。
mod_dbd
提供了5个函数供其它模块使用。具体的API如下:
typedef struct {
apr_dbd_t *handle;
apr_dbd_driver_t *driver;
apr_hash_t *prepared;
} ap_dbd_t;
/* Export functions to access the database */
/* acquire a connection that MUST be explicitly closed.
* Returns NULL on error
*/
AP_DECLARE(ap_dbd_t*) ap_dbd_open(apr_pool_t*, server_rec*);
/* release a connection acquired with ap_dbd_open */
AP_DECLARE(void) ap_dbd_close(server_rec*, ap_dbd_t*);
/* acquire a connection that will have the lifetime of a request
* and MUST NOT be explicitly closed. Return NULL on error.
* This is the preferred function for most applications.
*/
AP_DECLARE(ap_dbd_t*) ap_dbd_acquire(request_rec*);
/* acquire a connection that will have the lifetime of a connection
* and MUST NOT be explicitly closed. Return NULL on error.
*/
AP_DECLARE(ap_dbd_t*) ap_dbd_cacquire(request_rec*);
/* Prepare a statement for use by a client module */
AP_DECLARE(void) ap_dbd_prepare(server_rec*, const char*, const char*);
/* Also export them as optional functions for modules that prefer it */
APR_DECLARE_OPTIONAL_FN(ap_dbd_t*, ap_dbd_open, (apr_pool_t*, server_rec*));
APR_DECLARE_OPTIONAL_FN(void, ap_dbd_close, (server_rec*, ap_dbd_t*));
APR_DECLARE_OPTIONAL_FN(ap_dbd_t*, ap_dbd_acquire, (request_rec*));
APR_DECLARE_OPTIONAL_FN(ap_dbd_t*, ap_dbd_cacquire, (conn_rec*));
APR_DECLARE_OPTIONAL_FN(void, ap_dbd_prepare, (server_rec*, const char*, const char*));
mod_dbd
支持SQL预处理语句(prepared statement),某些模块可能希望使用它。必须为每一个预处理语句分配一个名字(label),它们将以hash方式存储:ap_dbd_t
的prepared
字段。Hash项为apr_dbd_prepared_t
类型,并可以被用于任何apr_dbd预处理语句(SQL查询或select命令)。
dbd的用户模块可以决定是否使用预处理语句以及在httpd.conf中能够使用什么样的语句,或者使用ap_dbd_prepare
提供它们自己的指令。
说明 | 空闲连接的持续时间 |
---|---|
语法 | DBDExptime time-in-seconds |
作用域 | server config, virtual host |
状态 | 扩展(E) |
模块 | mod_dbd |
设置在超出DBDKeep指定的连接数时空闲连接允许的持续时间(仅用于线程化平台)。
说明 | 每个进程持有的连接数 |
---|---|
语法 | DBDKeep number |
作用域 | server config, virtual host |
状态 | 扩展(E) |
模块 | mod_dbd |
设置每个进程持有的连接数,不同于为了处理最高负荷的DBDMax指令(仅用于线程化平台)。
说明 | 每个进程允许持有的最大连接数硬限制 |
---|---|
语法 | DBDMax number |
作用域 | server config, virtual host |
状态 | 扩展(E) |
模块 | mod_dbd |
设置每个进程允许持有的最大连接数硬限制(仅用于线程化平台)。
说明 | 每个进程必须持有的最小连接数 |
---|---|
语法 | DBDMin number |
作用域 | server config, virtual host |
状态 | 扩展(E) |
模块 | mod_dbd |
设置每个进程必须持有的最小连接数(仅用于线程化平台)。
说明 | 数据库的连接参数 |
---|---|
语法 | DBDParams param1=value1[,param2=value2] |
作用域 | server config, virtual host |
状态 | 扩展(E) |
模块 | mod_dbd |
设置底层驱动程序所必须的连接参数。通常这些参数都是无法在连接时使用默认值的参数,比如:用户名、密码、数据库名、主机名、端口号。
当前的驱动程序所需要的连接字符串参数包括:
PQconnectdb
传递part1:part2
将作为sqlite_open(part1, atoi(part2), NULL)
使用。sqlite3_open
传递说明 | 是否使用持久连接 |
---|---|
语法 | DBDPersist 0|1 |
作用域 | server config, virtual host |
状态 | 扩展(E) |
模块 | mod_dbd |
设为0表示禁用持久连接和连接池。当客户端请求时建立新连接,完成请求后立即关闭连接。通常仅在调试或负载很低的情况下使用。
1(默认)表示启用一个持久链接池(或者在非线程型平台上使用一个单独的LAMP风格的持久连接)。应当在绝大多数情况下使用。