apr dbd mysql.so_mod_dbd

Apache模块 mod_dbd

管理SQL数据库连接,为需要数据库功能的模块提供支持

扩展(E)

dbd_module

mod_dbd.c

Version 2.1 及以后的版本中可用

概述

apr_dbd管理管理SQL数据库连接。它为需要数据库功能的模块提供了数据库连接支持,并且负责管理数据库,从而为线程和非线程型的MPM提供了最佳的性能和可伸缩性。

aa0c270e91da98c8065ff34fa2251cf8.gif

这个模块根据不同的平台以优化的方式管理数据库连接。在非线程平台上,它使用经典的LAMP(Linux, Apache, Mysql, Perl/PHP/Python)方式提供持久连接。在线程化的平台上,它提供了更具伸缩性和更加有效的连接池,在一篇ApacheTutor文章中有相关描述。

aa0c270e91da98c8065ff34fa2251cf8.gif

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*));

aa0c270e91da98c8065ff34fa2251cf8.gif

ap_dbd_t的prepared字段。Hash项为apr_dbd_prepared_t类型,并可以被用于任何apr_dbd预处理语句(SQL查询或select命令)。

dbd的用户模块可以决定是否使用预处理语句以及在httpd.conf中能够使用什么样的语句,或者使用ap_dbd_prepare提供它们自己的指令。

aa0c270e91da98c8065ff34fa2251cf8.gif

空闲连接的持续时间

DBDExptime time-in-seconds

server config, virtual host

扩展(E)

mod_dbd

设置在超出DBDKeep指定的连接数时空闲连接允许的持续时间(仅用于线程化平台)。

aa0c270e91da98c8065ff34fa2251cf8.gif

每个进程持有的连接数

DBDKeep number

server config, virtual host

扩展(E)

mod_dbd

设置每个进程持有的连接数,不同于为了处理最高负荷的DBDMax指令(仅用于线程化平台)。

aa0c270e91da98c8065ff34fa2251cf8.gif

每个进程允许持有的最大连接数硬限制

DBDMax number

server config, virtual host

扩展(E)

mod_dbd

设置每个进程允许持有的最大连接数硬限制(仅用于线程化平台)。

aa0c270e91da98c8065ff34fa2251cf8.gif

每个进程必须持有的最小连接数

DBDMin number

server config, virtual host

扩展(E)

mod_dbd

设置每个进程必须持有的最小连接数(仅用于线程化平台)。

aa0c270e91da98c8065ff34fa2251cf8.gif

数据库的连接参数

DBDParams param1=value1[,param2=value2]

server config, virtual host

扩展(E)

mod_dbd

设置底层驱动程序所必须的连接参数。通常这些参数都是无法在连接时使用默认值的参数,比如:用户名、密码、数据库名、主机名、端口号。

当前的驱动程序所需要的连接字符串参数包括:

MySQL

host, port, user, pass, dbname, sock

Oracle

user, pass, dbname, server

PostgreSQL

直接通过PQconnectdb传递

SQLite2

使用分号分割,part1:part2将作为sqlite_open(part1, atoi(part2), NULL)使用。

SQLite3

直接通过sqlite3_open传递

aa0c270e91da98c8065ff34fa2251cf8.gif

是否使用持久连接

DBDPersist 0|1

server config, virtual host

扩展(E)

mod_dbd

设为0表示禁用持久连接和连接池。当客户端请求时建立新连接,完成请求后立即关闭连接。通常仅在调试或负载很低的情况下使用。

1(默认)表示启用一个持久链接池(或者在非线程型平台上使用一个单独的LAMP风格的持久连接)。应当在绝大多数情况下使用。

aa0c270e91da98c8065ff34fa2251cf8.gif

定义一个SQL预处理语句

DBDPrepareSQL "SQL statement" label

server config, virtual host

扩展(E)

mod_dbd

对于认证之类反复使用同一个SQL语句的模块,通过在启动时预处理指定的SQL语句而不是在每次使用时处理可以获得的最佳性能。该指令可以定义一个SQL预处理语句并为其分配一个标签(label)。

aa0c270e91da98c8065ff34fa2251cf8.gif

指定一个数据库驱动程序

DBDriver name

server config, virtual host

扩展(E)

mod_dbd

通过名字选择一个apr_dbd驱动程序。该驱动程序必须已经安装在你的系统上了(在Unix上是一个共享对象,在Windows上是一个动态连接库)。比如:DBDriver mysql表示选择apr_dbd_mysql.so中的MySQL驱动程序,而DBDriver pgsql则表示选择apr_dbd_pgsql.so中的PostgreSQL驱动程序。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值