数据库连接池是否重要?

时间:2011-02-16 20:52:35

标签: php java-ee connection-pooling dynamic-languages

在Java世界中,app服务器汇集“昂贵”资源(如数据库连接)是非常标准的。另一方面,在动态语言中,大多数堆栈与池化资源,尤其是数据库连接几乎没有关系。

E.g。对于流行的PHP + MySQL组合,我很少看到它用于持久连接,这可以被认为是穷人合并的连接。

如果汇集数据库连接的概念没有被广泛实现,这是否意味着在实际部署中性能/可伸缩性增益可能不是那么重要?

4 个答案:

答案 0 :(得分:3)

连接池的主要原因是在第一个实例中建立连接的开销。我见过这个过去需要0.5秒。

在高事务环境中,能够保持连接打开,并在连接中发送多个请求,一个接一个地节省大量资金。因此,您可能看不到低事务数据库中的收益,但如果忽略此有用模式,您的应用程序也不会扩展。

它还有助于以更清晰的方式管理开放连接的数量。

答案 1 :(得分:0)

  

如果汇集DB的概念   联系并不广泛   实施,这是否意味着   性能/可扩展性可能会增加   不是那么重要,在   现实生活中的部署?

这只意味着PHP没有内置的连接池。但是,并不意味着你不能使用它,例如,对于Postgres,你可以使用PGPool。

答案 2 :(得分:0)

通常使用连接轮询,因为某些数据库供应商会根据您的许可证限制您对给定数据库的连接数。开源数据库没有这样的限制,因为它们是免费的。所以对MySQL来说这不是什么大问题。

使用连接轮询的另一个原因是限制与数据库服务器的当前连接数,因为每个新连接都消耗大量内存,并且您不想耗尽服务器内存。

持久连接的问题是它们永远不会关闭,直到客户端进程死亡。客户端进程实际上是处理PHP请求的Web服务器进程。因此,如果将Web服务器配置为限制并发请求的数量,则还会限制打开的持久性数据库连接的数量。您可以在Apache中将MaxClients参数设置为合理的值,而不会耗尽服务器RAM。

顺便说一下,将所有静态内容(CSS,JavaScript,图像等)移动到单独的多线程Web服务器(Nginx,lighttpd等)也是明智之举,因此同时进行的用户访问不会你的Apache分叉到很多进程。

答案 3 :(得分:0)

我的一般意见是,连接池通常不用于速度不像其他问题那样重要的环境。例如,AOLServer使用动态语言(Tcl),但性能很高,并使用连接池。