Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/253.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 数据库连接池有那么重要吗?_Php_Jakarta Ee_Connection Pooling_Dynamic Languages - Fatal编程技术网

Php 数据库连接池有那么重要吗?

Php 数据库连接池有那么重要吗?,php,jakarta-ee,connection-pooling,dynamic-languages,Php,Jakarta Ee,Connection Pooling,Dynamic Languages,在Java世界中,应用服务器汇集“昂贵”的资源(如DB连接)是相当标准的。另一方面,在动态语言中,大多数堆栈与池资源(尤其是DB连接)关系不大 例如,对于流行的PHP+MySQL组合,我很少看到它与持久连接一起使用,这可以被认为是穷人的池连接 如果数据库连接池的概念没有得到广泛实施,这是否意味着在实际部署中,性能/可伸缩性增益可能并不那么重要?连接池的主要原因是在第一个实例中建立连接的开销。我在过去看到这需要0.5秒 在高事务性环境中,保持连接打开并在连接上一个接一个地发送多个请求的能力可以节省

在Java世界中,应用服务器汇集“昂贵”的资源(如DB连接)是相当标准的。另一方面,在动态语言中,大多数堆栈与池资源(尤其是DB连接)关系不大

例如,对于流行的PHP+MySQL组合,我很少看到它与持久连接一起使用,这可以被认为是穷人的池连接


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

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

在高事务性环境中,保持连接打开并在连接上一个接一个地发送多个请求的能力可以节省大量成本。因此,如果忽略这个有用的模式,您可能看不到低事务性数据库带来的好处,但是您的应用程序也不会扩展

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

如果池数据库的概念 联系不是那么广泛 实施,这是否意味着 性能/可扩展性的提高可能会 不是那么重要,是吗 真实部署


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

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

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

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


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

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

我不确定第一段是否正确。连接是重量级对象,因此需要合并它们。并不是说特定的数据库服务器无法处理100或1000个连接,我并没有说这是使用连接池的唯一原因。我只是说,这是经常使用的原因,但可能还有其他原因。