关于“持久的数据库连接”

转载 2004年08月23日 11:38:00
   image010.gif

  关于数据库连接的分配,多进程模型(如Apache)还存在一个问题。这个问题与我以前讲过的PHP脚本的不持久特性是相伴相生的。请先看看下图。

  你所见的这幅图从一个由数据库驱动的动态web应用的角度说明了Apache/PHP解决方案是怎样工作并处理访问请求的。你可能注意到了,正如上文提到的一样,每一个Apache子进程一次处理一个单独的客户端连接。由于PHP脚本是单独由处理访问PHP生成文档的请求的每一个子进程来解释的,每一个进程均必须建立其独立的查询数据库的连接。

  由于PHP脚本没有持久性,数据库连接在每次脚本运行时都必须打开和关闭。尤其对于那些被频繁访问的站点来说,在连接上浪费的时间可能会导致巨大的性能损失

  为了避免这种情况,PHP开发商也许会采用持久的数据库连接方式,使访问请求处理完毕和PHP脚本执行结束之后仍保持打开状态。

  但是,在PHP环境中采用持久的连接方式和传统意义上的连接方式并不相同。在PHP环境中,当一个持久的连接被子进程打开后,不需要再耗费额外的连接时间,就能够重用该连接。但是要指出的是,只有通过同一个子进程才能重用它。由于该连接是由特定的进程打开的,因此,即使打开它的子进程处于空闲状态,不用处理任何的请求,此连接也保持着对其的附着状态。事实上,即便是该子进程又继续处理另一个非PHP请求,该数据库连接也不会关闭。

  在持久的数据库连接的情况下,我们观察到的实际上还是与前面所讲相同的子进程与HTTP keepalive 请求的11映射比率。但是,在当前情况下,数据库连接将会一直维持打开状态,并贯穿在打开它的子进程的整个生命期中。

  这种情形会导致打开的数据库连接过剩,从而使得占用的内存空间大小超过实际负载的需要。在某些环境里,这种数据库连接过剩在高负载情况下会使数据库达到连接数量的极限。这时,服务器将不再对更多的请求作出响应。用户可以把这种情况看作是应用服务器或HTTP服务器对数据库执行了一次拒绝服务攻击,从而使自己当机。

非持久连接和持久连接

非持久连接在HTTP客户机接受最后带有封装对象的响应报文的时候,HTTP服务器进程会通知TCP断开该TCP连接。 缺点:必须为每一个请求的对象建立和维护一个全新的连接。这样对于每个这样的连接,在客户...
  • lf644206005
  • lf644206005
  • 2015-03-20 00:29:49
  • 467

Http持久连接、非持久连接和pipeline连接

基本概念  持久连接:使用同一个TCP连接发送和接受 多个 http请求/应答;   非持久连接:一个TCP连接只能发送和接受 一个 http请求/应答;持久连接的两种类型keep-alive机制(...
  • yangguosb
  • yangguosb
  • 2017-11-03 14:48:28
  • 100

HTTP非持久连接和持久连接

HTTP非持久连接和持久连接 HTTP既可以使用非持久连接(nonpersistent connection),也可以使用持久连接(persistent connection)。HTTP/1.0...
  • liqing19850102
  • liqing19850102
  • 2013-09-26 10:49:07
  • 4475

HTTP协议:pipeline、持久连接、非持久连接

HTTP协议:pipeline、持久连接、非持久连接 1.  简介 1.1 定义       1. 非持久连接:每个连接处理一个请求-响应事务。       2. 持久...
  • chenglinhust
  • chenglinhust
  • 2015-07-21 00:44:16
  • 2950

Http长连接、短连接、持久连接这三个概念的分析总结

什么是Http长连接 长连接定义: client方与server方先建立连接,连接建立后不断开,然后再进行报文发送和接收。这种方式下由于通讯连接一直存在。此种方式常用于P2P点对点的通信。 长连接的...
  • fhzaitian
  • fhzaitian
  • 2016-06-16 15:20:25
  • 5694

spring 和持久化技术的集成:

1 spring mybatis 配置事务管理:                                   factory-method="decrypt">...
  • xiaoliuliu2050
  • xiaoliuliu2050
  • 2016-04-23 14:07:43
  • 1549

设置SSH持久连接

在使用ssh命令或者shell工具(比如iterm、putty、xshell等)用ssh链接服务端时,一段时间不操作或屏幕没输出(比如复制文件)的时候,就会自动断开连接,这样会搞的挺烦的 针对这个问题...
  • qq_15437667
  • qq_15437667
  • 2017-10-22 14:48:01
  • 300

tomcat中session持久化配置

修改tomcat配置文件:conf/context.mxl debug=0 saveOnRestart="true" maxActiveSession...
  • jinxiguo
  • jinxiguo
  • 2017-01-11 14:07:57
  • 207

java持久性 链接数据库的几种优缺点

在任何 JavaTM 技术应用程序中,持久性框架都是一个极其重要的部分。作出选择是令人头疼的一件事。因此,开发人员常常选择流行的框架,不论是企业级 JavaBeans 还是 Hibernate。   ...
  • bgbug
  • bgbug
  • 2008-04-09 10:26:00
  • 959

使用Phalcon+PHP-FPM构建PHP基于多进程的数据库连接池

原文链接: https://github.com/fupengfei058/article-collection/blob/master/%E4%BD%BF%E7%94%A8Phalcon+PHP-...
  • fff058
  • fff058
  • 2017-12-01 23:46:14
  • 214
收藏助手
不良信息举报
您举报文章:关于“持久的数据库连接”
举报原因:
原因补充:

(最多只允许输入30个字)