Linux中国  设为主页
 收藏本站
 
当前位置: > 首页 ->编程语言 ->PHP4/PHP5 ->可扩展 可伸缩的 Oracle 与 PHP
  相关分类: 
ASP
ViualBasic
UML / Rational Rose
PHP4/PHP5
Perl
JAVA/JSP教程
Delphi
ColdFusion
CGI
C/C++
ASP.NET
XML
  站内搜索: 
热门文章排行
热门文章排行 PHP聊天室技术(06-01)
7种流行PHP集成开发工具(IDE)的比较(06-01)
Linux新手入门常用命令大全 (04-16)
Apache+PHP5.0+GD+Zend+Mysql的配置(04-11)
APACHE中 httpd.conf 的中文详解 (04-16)
精采文章排行
精采文章排行 传奇的诞生 PHP三位创始人简介(06-01)
php在yahoo!的应用(06-01)
7种流行PHP集成开发工具(IDE)的比较(06-01)
PHP开发框架的现状和展望(06-01)
草根的进化PHP语言PHP语言发展简史(06-01)
  ·php在yahoo!的应用·7种流行PHP集成开发工具(IDE)的比较·PHP开发框架的现状和展望·草根的进化PHP语言PHP语言发展简史·Zend Studio5.5测试版 兼容三系统·为PHP5定做 ZendBox 将明年初发布·PHP:“草根语言”挑战“大腕”Java .Net·PHP正式进入IIS微软与Zend携手推动PHP语·PHP语言发展历史

可扩展 可伸缩的 Oracle 与 PHP

作者:webmaster   来源: ORACLE   点击:   日期:2007-04-16 [收藏] [投稿]

  IE是否经常中毒?推荐您

了解一般的技术和设计,用于编写与 Oracle 数据库的使用直接相关的可管理、可伸缩的快速 PHP 代码。

在过去九年中,PHP 已经从组装个人网站的小型语言发展到为世界上某些最大和流量最高的网站提供动力。任何高流量网站的三个最重要的设计方面是可伸缩性、性能和可维护性。可伸缩性意味着您的应用程序流量负载可以不断增长,而不会从根本上破坏其工作方式。性能是快速为单个请求提供服务的能力。 可维护性是能够在不造成过多负担的情况下修复、重新调整、扩增或更改应用程序的品质。

利用 PHP 来实现这三个设计目标并不困难,但确实需要预先考虑怎么样设计和构建您的应用程序。关于编写可管理、可伸缩的快速 PHP 代码的论题范围很广;针对每个论题都有大量的技术和文章。在本文中,我们将讨论那些与使用 Oracle 及 PHP 直接相关的因素。有很多一般(非 Oracle 专用)技术和设计可能非常有用。

我喜欢以一个尖锐的警告作为任何与性能相关的谈话或文章的开始:始终要记住,最后总有一天,快速却不完善的应用程序将毫无价值。性能调整以及对应用程序不利因素的设计提取都很容易分散您的精力。Web 的性质就是这样,经常发布版本的方法非常有效。(发布网站“新版本”的成本很低,因为最终用户始终需要这些代码。)这就允许您延迟对代码的重大调整,直到需要这样做为止。因此,首要目标应该是创建便于重新调整的代码。

创建和管理连接

与 Oracle 数据库最基本的交互之一是连接。要了解连接怎么样影响您的应用程序的性能和可伸缩性,需要了解连接的生命周期,如图 1 所示。每个步骤所涉及的工作如下:

  • 客户创建连接: 客户创建与 Oracle 监听器的网络连接,提供其认证证书,并请求会话。
  • 服务器创建一个新会话:在认证之后,服务器为客户创建一个新会话。如果您没有通过 Oracle 多线程服务器(MTS — 它在可伸缩性及性能问题上臭名昭著)使用共享会话,则此步骤包括服务器为会话创建一个专用进程。该进程通常称为影子进程。创建此进程需要不少工作量。除了创建进程的正常开销之外,影子进程在其创建期间还必须临时锁定某些共享系统资源。
  • 客户端执行查询: 既然客户端已经具有开放的连接,就可以根据需要来执行查询。
  • 客户端关闭连接: 当客户端完成工作后,关闭与服务器的连接。
  • 服务器毁坏会话: 与用户会话相关的影子进程被毁坏,任何未提交的事务被回滚。

图 1:连接的生命周期

由于创建新的影子进程的成本相当大,我们应该在必要时努力避开它。达到此目的的最简单方法是使用持续连接。PHP 被设计为一种非会话状态的语言。这意味着在默认情况下,在请求期间创建的任何信息(或例程化的资源)都会在请求结束时被彻底清除并毁坏。对于 Oracle 客户连接,我们希望避免这种行为。

为了使连接能够从一个请求保留到下一个请求,您可以使用以下两种连接变通方法之一:

OCIPLogin($username, $password [, $tnsname])

OCINLogin($username, $password [, $tnsname])

这两个函数都创建持续的服务器连接,尽管 OCINLogin() 将为每个请求创建一个新会话句柄。如果您的应用程序要使用事务,并且您希望将同时发生的事务分散到多个会话中,则可以使用 OCINLogin()。

使用持续连接的一个副作用是您更容易出现进程不足的情况。基于专用 Oracle 数据库运行单个 Apache Web 服务器(子进程的最大默认数量为 256)时,可能从不会遇到问题。但是如果增加到 4 个 Web 服务器,每个服务器运行 256 个具有持续 Oracle 连接的子进程,现在则要创建 1024 个与 Oracle 数据库的连接,并且很快就会与 Oracle 实例的资源限制发生冲突。

在 Oracle 实例配置文件 (init.ora) 中,有两个可调整的参数:

sessions = NNNNprocesses = NNNN

这两个参数控制着实例可以支持的最大会话数和最大进程数。如果您需要支持 1024 个同时出现的连接,则需要至少 1024 个会话(因为 OCINLogin() 连接和某些递归查询可能在每个连接中需要多个会话),而需要的进程还会更多(因为我们还需要考虑 Oracle 后台进程)。不幸的是,不能任意将这些进程设得很高。Oracle 进程消耗不少的专用内存(在多数系统中每个进程需要 2 到 3MB)。从个体来说,这些进程很小,但当把它们作为一组并与服务器系统全局区 (SGA) 所需要的共享内存相结合时,很快就会让您因为数据库服务器的物理内存限制而感到烦恼。

 如果您对本文有任何疑问或者建议,请到讨论区发表您的意见: >> 论坛入口 <<

上一页12 3 4 5 下一页

上一篇:使用 PHP 和 Oracle 开发企业应用程序   下一篇:PHP 5 数据对象 (PDO) 抽象层与 Oracle
文章评论】 【收藏本文】 【推荐好友】 【打印本文】 【我要投稿】 【论坛讨论

   相关文章:
·传奇的诞生 PHP三位创始人简介

   文章评论:(1条)
  
 请留名: 匿名评论   点击查看所有评论 论坛讨论
 

 声明:刊登此文章是为了传递更多信息,文章内容仅供参考,转载请注明出处。