2011-02-16 131 views
2

在Java世界中,应用程序服务器非常适合集中“昂贵”的资源,如数据库连接。另一方面,在动态语言中,大多数堆栈与池化资源,尤其是数据库连接无关。数据库连接池是否重要?

E.g.对于流行的PHP + MySQL组合,我很少见到它与持久连接一起使用,这可以被认为是穷人联网连接。

如果池DB连接的概念并不广泛实施,这是否意味着性能/可扩展性的收益可能不是那么重要,在现实生活中的部署?

回答

3

的主要原因连接池是建立在第一种情况下连接的开销。我已经看到这在过去需要0.5秒。

在高事务环境,保持连接打开,并发送多个请求下的连接,一前一后的能力有显著的节约。因此,如果您忽略这种有用的模式,您可能无法在较低的事务数据库中看到收益,但是您的应用程序不会扩展。

这也有助于在一个更加清晰的方式打开的连接管理的数量。

0

如果池DB 连接的概念并不是广泛 实现的,这是否意味着 性能/可扩展性的收益可能 不那么重要,在 现实生活中的部署?

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

0

连接轮询经常使用,因为一些数据库厂商限制,你必须根据你的许可的特定数据库的连接数。开源数据库没有这种限制,因为它们是免费的。所以这对于MySQL来说并不是什么问题。

另一个原因是使用连接查询是限制数据库服务器当前连接数,因为每个新的连接消耗大量的内存,你不希望用尽你的服务器内存。

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

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

+0

我不确定第一段是否为真。连接是重量级对象,因此需要汇集。并不是特定的数据库服务器不能处理100或1000的连接。 – cherouvim 2011-02-16 21:44:58

0

我的一般观点是连接池一般不用于速度不像其他问题那么重要的环境中。例如,AOLServer使用动态语言(Tcl),但具有高性能并使用连接池。