首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >我必须把DB连接/初始化放在FCGI循环之外才能利用Perl中的FastCGI吗?

问我必须把DB连接/初始化放在FCGI循环之外才能利用Perl中的FastCGI吗?
EN

Stack Overflow用户
提问于 2008-10-15 23:24:25
回答 4查看 1.1K关注 0票数 6

假设我有一些Perl代码,它在每次命中数据库的特定行时递增一列,并且我希望它被频繁命中,所以我想使用FCGI对其进行优化。现在,我基本上将大部分代码包装在这样的东西中:

代码语言:javascript
复制
while (FCGI::accept() >= 0) {
 [code which currently creates a db connection and makes calls through it]
}

我想知道是不是把数据库连接(我的$dbh =DBI->connect(等))放在FCGI循环之外,这样脚本就可以保持连接的活动状态,或者我仍然可以通过把它留在循环中来获得FCGI在速度和资源方面的优势?

EN

回答 4

Stack Overflow用户

发布于 2008-10-16 01:43:46

bmdhacks是正确的,如果你使用MySQL或PostgreSQL,这并不重要,因为连接相当便宜。但是,无论您的数据库是什么,您都可以通过使用持久连接获得速度上的提升。

但是,如果您决定使用持久连接,则需要担心连接超时。根据你的服务器设置和你得到的流量,这些都会在你的程序生命周期中的任何时候发生。ping()是你的朋友。如果你需要更多的帮助,看看Apache::DBI是如何做到的。

票数 3
EN

Stack Overflow用户

发布于 2008-10-18 08:45:51

不要把连接放在循环之外,你可能会失去连接,然后就不能重新连接了。您可以将其放入全局,但然后您必须执行连接检查,然后自己重新连接。

相反,可以使用Ima::DBI或DBI->connect_cached()为您执行连接缓存。它将做所有的工作,以确保连接是活动的,并在必要时重新连接。

但在你费心之前,先做一些基准测试,找出你真正的瓶颈在哪里。在过去,数据库连接是瓶颈,但那是在Oracle上,几年前也是10+。

票数 2
EN

Stack Overflow用户

发布于 2008-10-15 23:29:27

即使你将DB连接保留在循环中,你仍然可以从FCGI中获益--但如果你把它移出,你会得到更多。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/206885

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档