Database 如何在mod_perl中建立DBIC持久数据库连接?

Database 如何在mod_perl中建立DBIC持久数据库连接?,database,perl,persistence,dbi,dbix-class,Database,Perl,Persistence,Dbi,Dbix Class,我正在为我的web应用程序使用mod_perl。目前,我计划在网络上使用mysql数据库。在每个显示_customer _transaction.CGI的CGI请求中,我的脚本将 打开跨网络的数据库连接 使用SQL语句对数据库执行查询 分析从数据库检索到的数据 以HTML格式打印数据 关闭数据库连接 经过一些分析,我意识到步骤(1)是瓶颈。因此,我希望避免为每个CGI请求打开和关闭数据库连接。我的愿望是,如果我的第一个CGI请求打开了一个数据库连接,我的第二个传入CGI请求(来自不同的客户端)可

我正在为我的web应用程序使用mod_perl。目前,我计划在网络上使用mysql数据库。在每个显示_customer _transaction.CGI的CGI请求中,我的脚本将

  • 打开跨网络的数据库连接
  • 使用SQL语句对数据库执行查询
  • 分析从数据库检索到的数据
  • 以HTML格式打印数据
  • 关闭数据库连接
  • 经过一些分析,我意识到步骤(1)是瓶颈。因此,我希望避免为每个CGI请求打开和关闭数据库连接。我的愿望是,如果我的第一个CGI请求打开了一个数据库连接,我的第二个传入CGI请求(来自不同的客户端)可以重用第一个数据库连接

    我试图在谷歌上搜索“DBIX持久数据库连接”,但几乎找不到相关的结果。(编辑:这是因为它被称为DBIC,或DBIx::Class,而不是DBIx。)

    我进一步使用查找相关信息(不过,我的目的是在DBIX上,而不是在Apache::DBI上)。有一些信息让我感到困惑:

    Apache::DBI模块仍然有一个限制:它在每个进程的基础上保持数据库连接的持久性

    一直以来,我对Apache如何为CGI请求提供服务的概念是

  • Apache将始终生成一个新进程来服务传入的新CGI请求。每当Perl解释器完成执行的Perl脚本时,该进程就会停止
  • 因此,如果Apache::DBI模块只能在每个进程的基础上保持数据库连接的持久性,那么我的第二个CGI请求如何重新使用第一个CGI请求打开的连接


    但是回到我最初的问题上来。如何在mod_perl中建立DBIX持久数据库连接?

    在注销之前,请尝试Apache::DBI。但是,您还希望使CGI脚本持久化。如果您现在有普通的CGI程序,可以使用PerlRun或PerlRegistry选项使其持久化。这与Apache::DBI一起应该可以完成这项工作。当然,每个子进程都有DBI连接,但这并不是不合理的


    在你放弃之前试试看。:)

    Apache::DBI改变了DBI模块的工作方式。假设您使用的是DBIx::Class(您不够具体),那么它将使用DBI模块来获取其数据库连接,因此这对您来说是可行的

    当您使用mod_perl时(假设您的mod_perl设置是正确的),perl解释器将加载到Apache中,您的程序将加载到该解释器中。Apache运行有限数量的进程来服务请求——每个进程服务多个请求


    Apache进程最终确实会消亡,并得到重生,但在这之前,它们服务于许多请求。这些是Apache::DBI文档所指的过程;它试图说“你将一次又一次重复使用同一个连接,但这并不意味着一次只能打开一个连接。”

    最后,根据每秒连接数非常低的判断,我现在没有使用持久性连接。对于性能扩展计划,我宁愿选择DBIx+memcache解决方案。

    请您澄清一下DBIx是什么意思?这是一个充满模块(DBIx::)的整个名称空间,还是其他什么?我的意思是: