【发布时间】:2010-10-18 13:41:22
【问题描述】:
我正在为我的 Web 应用程序使用 mod_perl。目前,我计划在网络上使用一个mysql数据库。在对 display_customer_transaction.cgi 的每个 CGI 请求中,我的脚本都会
- 跨网络打开数据库连接
- 使用 SQL 语句对数据库执行查询
- 分析从数据库中检索到的数据
- 以 HTML 格式打印数据
- 关闭数据库连接
经过一些分析,我意识到步骤 (1) 是瓶颈。因此,我希望避免为每个 CGI 请求打开和关闭数据库连接。我的愿望是,如果我的第一个 CGI 请求打开了一个数据库连接,我的第二个传入 CGI 请求(来自不同的客户端)可能会重用第一个数据库连接。
我尝试在 Google 上搜索“DBIX Persistent Database Connection”,但几乎找不到相关结果。 (编辑:那是因为它被称为 DBIC,或 DBIx::Class,而不是 DBIX。)
我使用Apache::DBI 进一步查找相关信息(但是,我的意图是针对 DBIX,而不是 Apache::DBI)。有一些信息让我感到困惑:
Apache::DBI 模块仍然有一个限制:它在每个进程的基础上保持数据库连接的持久性。
一直以来,我对 Apache 如何服务 CGI 请求的概念是这样的
- Apache 将始终生成一个新进程来服务传入的新 CGI 请求。每当 Perl 解释器执行完 Perl 脚本时,进程就会死掉。
那么,如果 Apache::DBI 模块只能在每个进程的基础上保持数据库连接的持久性,我的第二个 CGI 请求如何重新使用第一个 CGI 请求打开的连接?
但是回到我最初的问题。如何在 mod_perl 中建立 DBIX 持久数据库连接?
【问题讨论】:
-
您能澄清一下您所说的 DBIX 是什么意思吗?那是一个充满模块的整个命名空间(DBIx::),还是别的什么?
标签: database perl persistence dbi dbix-class