PHP/Oracle:为可伸缩性而构建


PHP/Oracle 体验:为可伸缩性而构建 Kuassi Mensah Java 平台组,组产品经理 http://db360.blogspot.com PHP/Oracle:为可伸缩性而构建 9PHP wPHP 是什么 w灵活的 Web 开发 wOracle 数据库 w将 Oracle 与 PHP 结合使用 wPHP/Oracle:为高性能和可伸缩性而构建 w新增功能 PHP 是什么? • 最流行的脚本语言 • 简单/通用 • 继 Java、C 和 C++ 之后最流行的语言 • 动态类型 • PHP5 具有面向对象功能 • 免费 • 开放源代码 • BSD 式许可 • 多平台 • 应用广泛,拥有强大的社区 • 2000 多万个站点在使用 PHP PHP 实现了灵活的 Web 开发 • 快速、循环使用和具有生产质量的应用程序开发 • 高性能、大规模 Web 应用程序开发 • 现有/异构系统的集成式 Web 前端 • 出色的文本和 XML 处理 • Web 2.0、Web 服务和 SOA 基本 PHP 示例 Basic PHP Example

Agent:So who do you think you are?

PHP 扩展 NET 函数、特定于 Apache 的函数、Alternative PHP Cache、高级 PHP 调试器、数组函数、Aspell 函数 [不建议使用]、BCMath 任意精度数学函 数、PHP 字节码编译器、Bzip2 压缩函数、日历函数、CCVS API 函数 [不建议使用]、类/对象函数、Classkit 函数、ClibPDF 函数、COM 和 .Net (Windows)、Crack 函数、字符类型函数、CURL、客户端 URL 库函数、Cybercash 支付函数、Credit Mutuel CyberMUT 函数、Cyrus IMAP 管理 函数、日期和时间函数、DB++ 函数、数据库(dbm 样式)提取层函数、dBase 函数、DBM 函数 [不建议使用]、dbx 函数、直接 IO 函数、目录 函数、DOM 函数、DOM XML 函数、enchant 函数、错误处理和记录函数、Exif 函数、期望函数、文件更改监视器函数、表单数据格式函数、 Fileinfo 函数、filePro 函数、Filesystem 函数、过滤器函数、Firebird/InterBase 函数、Firebird/Interbase 函数 (PDO_FIREBIRD)、FriBiDi 函数、 FrontBase 函数、FTP 函数、功能处理函数、GeoIP 函数、Gettext、GMP 函数、gnupg 函数、Net_Gopher、散列函数、HTTP、Hyperwave 函 数、Hyperwave API 函数、IBM DB2、Cloudscape 和 Apache Derby 函数、ICAP 函数 [已删除]、iconv 函数、ID3 函数、IIS 管理函数、图像函 数、IMAP、POP3 和 NNTP 函数、Informix 函数、Informix 函数 (PDO_INFORMIX)、Ingres II 函数、IRC 网关函数、PHP/Java 集成、JSON 函 数、KADM5、LDAP 函数、libxml 函数、Lotus Notes 函数、LZF 函数、邮件函数、mailparse 函数、数学函数、MaxDB PHP 扩展、MCAL 函数 、Mcrypt 加密函数、MCVE (Monetra) 支付函数、Memcache 函数、Mhash 函数、Mimetype 函数、适用于 Flash 的 Ming 函数、Miscellaneous 函数、mnoGoSearch 函数、Microsoft SQL Server 函数、Microsoft SQL Server 和 Sybase 函数 (PDO_DBLIB)、Mohawk 软件会话处理器函数、 mSQL 函数、多字节字符串函数、muscat 函数、MySQL 函数、MySQL 函数 (PDO_MYSQL)、MySQL Improved Extension、Ncurses 终端屏幕 控制函数、网络函数、Newt 函数、特定于 NSAPI 的函数、对象聚合/组合函数、对象属性和方法调用过载、Oracle 函数、ODBC 函数(已统一) 、ODBC 和 DB2 函数 (PDO_ODBC)、oggvorbis、OpenAL 音频绑定、OpenSSL 函数、Oracle 函数 [不建议使用]、Oracle 函数 (PDO_OCI)、输 出控制函数、Ovrimos SQL 函数、Paradox 文件访问、Parsekit 函数、进程处理函数、正则表达式函数 (Perl-Compatible)、PDF 函数、PDO 函 数、PHP Options&Information、POSIX 函数、正则表达式函数(扩展了 POSIX)、PostgreSQL 函数、PostgreSQL 函数 (PDO_PGSQL)、打印 机函数、程序执行函数、PostScript 文档创建、Pspell 函数、qtdom 函数、Radius、Rar 函数、GNU Readline、GNU Recode 函数、RPM 标题 读取函数、runkit 函数、Satellite CORBA 客户端扩展 [不建议使用]、SDO 函数、SDO XML 数据访问服务函数、SDO 关系数据访问服务函数、 Semaphore、共享内存和 IPC 函数、SESAM 数据库函数、PostgreSQL 会话保存处理程序、会话处理函数、共享内存函数、SimpleXML 函数、 SNMP 函数、SOAP 函数、套接字函数、标准 PHP 库 (SPL) 函数、SQLite 函数、SQLite 函数 (PDO_SQLITE)、安全 Shell2 函数、统计函数、 流函数、字符串函数、Shockwave Flash 函数、Sybase 函数、TCP Wrappers 函数、Tidy 函数、Tokenizer 函数、Unicode 函数、URL 函数、变 量处理函数、Verisign Payflow Pro 函数、vpopmail 函数、W32api 函数、WDDX 函数、win32ps 函数、win32service 函数、xattr 函数、xdiff 函 数、XML Parser 函数、XML-RPC 函数、XMLReader 函数、xmlwriter 函数、XSL 函数、XSLT 函数、YAZ 函数、YP/NIS 函数、Zip 文件函数、 Zlib 压缩函数。 PHP/Oracle:为可伸缩性而构建 • PHP 9Oracle 数据库 • 将 Oracle 与 PHP 结合使用 • PHP/Oracle:为高性能 和可伸缩性而构建 • 新增功能 Oracle Oracle 数据库 管理所有类型的数据 • 关系 • 对象-关系 • 文本 • XML • 多介质 • 空间 • “内容” 健壮的企业 服务 • 数据完整性 • 并发 • 事务 • 安全性 功能齐备 • SQL、PL/SQL • RAC/HA • XML 数据库 • 规则引擎 • 表达式过滤器 • 分析函数 • 正则表达式 • 虚拟专用数据库 • 分区 • LOB 和 BFILE • 流/AQ 可伸缩性 • 会话体系结构 PHP/Oracle PHP • 最流行的 Web 脚本语言 Oracle • 最流行的企业 RDBMS PHP 和 Oracle 相结合 •灵活的、可伸缩的 Web 应用程序 •完整的、丰富的、健壮的 企业服务和可伸缩的数据服务器 PHP/Oracle:为可伸缩性而构建 • PHP • Oracle 9将 Oracle 与 PHP 结合使用 • Oracle 对 PHP 的承诺 • 它们是如何结合在一起的 • OCI8 扩展 • PHP/Oracle:为高性能和可伸缩性而构建 • 新增功能 Oracle 对 PHP 的承诺 • 对 PHP 的长期承诺 • 成千上万的开发人员使用 Oracle 和 PHP • Oracle 参加各种 PHP 社区和专家组 • 参与 PHP 活动和会议 • 向社区提交错误修复程序 • Zend Core for Oracle:与 Zend 共同努力 • 预先构建的产品包(Apache、PHP、基于 Oracle OCI 的驱动程序) • 获得改进的/重整的 OCI8 扩展 • 2005 年 10 月发布了来自 Zend 的企业支持 PHP/Oracle:三层 Web 模型 Oracle 数据库 8i、9i 或 10gWeb 用户 中间层 Apache PHP OCI8 扩展 Oracle 客户端 库 8i、9i 或 10g OCI8 扩展 • 示例 "; ?> 简单连接 [//]主机[:端口][/服务名称] OCI8 扩展(续) • php.ini 参数 • 持久性连接管理 • 行预取 • 客户端语句缓存 • 分发 • php.net • 源代码、Windows 二进制文件 • 包括 oci8 扩展 • PECL - PHP 扩展社区库 • 更新包含新的 oci8 扩展的 PHP4 时很有用 • Zend Core for Oracle • Linux、Solaris、Windows、AIX OCI8 扩展(续) • 内置的全球化支持继承自 OCI • 对 PHP 应用程序基本透明 • NLS_LANG 定义 Oracle 本地化信息 • 多字节字符集需要 PHP mbstring 或 iconv 库 • 用户 ISO 本地化信息从 HTTP Accept Language 标题中获得 • 调用 PL/SQL 的 PHP 应用程序应将 ISO 本地化信息映射到 NLS_LANGUAGE 和 NLS_TERRITORY • 请参见“The Underground PHP and Oracle Manual”了 解更多信息。 PHP/Oracle:为可伸缩性而构建 • PHP • Oracle • 将 Oracle 与 PHP 结合使用 9PHP/Oracle:为高性能和可伸缩性而构建 • 连接管理 • 语句管理 • 事务管理 • 新增功能 连接管理 OCI8 连接 • 非持久性连接 •标准连接 •多个唯一连接 • 持久性连接 非持久性连接 标准连接 $c = oci_connect($username, $password, $dbname); • 连接与脚本具有相同的生命周期 • 脚本中的另一个 oci_connect() 返回相同的 DB 连接 多个唯一连接 $c = oci_new_connect($username, $password,$dbname); • 连接与脚本具有相同的生命周期 • 每个 oci_new_connect() 返回一个新的 DB 连接 • 用于独立的操作 持久性连接 $c = oci_connect($username, $password, $dbname); • 脚本完成时不自动关闭 • 后续连接建立时速度很快 • 但在应用程序空闲时仍占用资源 • 可在 php.ini 中配置 oci8.max_persistent oci8.persistent_timeout oci8.ping_interval 持久性连接被缓存 用户:数据库:字符集:权限 hr:XE:ALU32UTF8:normal system:XE:ALU32UTF8:sysdba oci_pconnect() 连接缓存 语句 管理 SQL 语句执行 使用 OCI8 执行 SQL 语句的步骤: • 分析 — oci_parse • 准备要执行的语句 • 绑定 — oci_bind_by_name • 在 WHERE 子句中有选择地绑定变量 • 执行 — oci_execute • 数据库执行该语句并缓冲结果 • 提取 — oci_fetch_all • 在数据库中有选择地检索结果 PHP 和 Oracle 之间的回程 回程 调整目标:尽量减少回程 行预取 Oracle 客户端库OCI8 扩展 北京 数据库 北京 伯尔尼 孟买 。 . . 设置 oci8.default_prefetch PHP 减少回程 OCI8 预取行 • “预取行”由 Oracle 在内部缓存 • 通过减少“回程”提高查询性能 • php.ini 中的默认预取大小 oci8.default_prefetch = 10 • 每个 DB“回程”中的最多行数 • 还设置了内存限制 1024 * oci8.default_prefetch • 还可以通过内联函数设置该值 oci_set_prefetch($s, 100); 语句缓存:无绑定变量 select col from tab where v = 1 select col from tab where v = 2 select col from tab where v = 1 select col from tab where v = 2 1: select col from tab where v = 1 2:select col from tab where v = 2 数据库缓存 缓存使用不当 语句缓存:绑定变量 select col from tab where v = :bv select col from tab where v = :bv select col from tab where v = :bv select col from tab where v = :bv 1: select col from tab where v = :bv 数据库缓存 自动运行的数据库功能 提高 性能 和安全性 OCI8 绑定示例 $s = oci_parse($c,"select last_name from employees where employee_id = :eidbv"); $myeid = 101; oci_bind_by_name($s, ":EIDBV", $myeid); oci_execute($s); oci_fetch_all($s, $res); echo "Last name is:".$res['LAST_NAME'][0]."
\n"; $myeid = 102; oci_execute($s); // No need to re-parse oci_fetch_all($s, $res); echo "Last name is:" . $res['LAST_NAME'][0] ."
\n"; 语句缓存:客户端 select col from tab select col from tab “使用语句 1” select col from tab 1: select col from tab 数据库缓存 设置 oci8.statement_cache_size 1: select col from tab 客户端缓存 OCI8 语句缓存 • OCI8 扩展具有客户端缓存 • php.ini oci8.statement_cache_size = 20 • 以语句数为单位 • 将缓存管理负载从 DB 移至 PHP 端 • 使用 PHP 端内存缓存语句句柄 • 使用 DB 的内存缓存每个会话指针 事务管理 自动提交 默认情况下 oci_execute() 自动提交 function do_simple_insert($conn, $array) { foreach ($array as $v) { $s = oci_parse($conn, "insert into ptab (pdata) values ('".$v."')"); $r = oci_execute($s); } } 这样很慢 显式提交 function do_transactional_insert($conn, $array) { $s = oci_parse($conn, 'insert into ptab (pdata) values (:bv)'); oci_bind_by_name($s, ':bv', $v, 20, SQLT_CHR); foreach ($array as $v) $r = oci_execute($s, OCI_DEFAULT); oci_commit($con); } 这样很快 批量插入(PHP 代码) function do_bulk_insert($conn, $array) { $s = oci_parse($conn, 'begin mypkg.myproc(:c1); end;'); oci_bind_array_by_name($s, ":c1", $array, count($array), -1, SQLT_CHR); oci_execute($s); } 这样可能最快 批量插入(PL/SQL 端) create or replace package mypkg as type arrtype is table of varchar2(20) index by pls_integer; procedure myproc(p1 in arrtype); end mypkg; create or replace package body mypkg as procedure myproc(p1 in arrtype) is begin forall i in indices of p1 insert into ptab values (p1(i)); end myproc; end mypkg; PHP/Oracle:为可伸缩性而构建 • PHP • Oracle • 将 Oracle 与 PHP 结合使用 • PHP/Oracle:为高性能和可伸缩性而构建 9新增功能 • Oracle 数据库 11g 中的 OCI8 增强 • 数据库驻留连接池 • 客户端查询结果缓存 Oracle 数据库 11g 中的 OCI8 增强 • 网格支持 • 开源社区版本 • 数据库驻留连接池 • 显著提高 PHP 应用程序的可伸缩性和性能 • 只需设置 php.ini 参数即可完美支持现有应用程序 • 客户端结果缓存 数据库驻留连接池 Oracle 数据库 11g DRCP 无连接池 11g 数据库驻留连接池 数据库驻留连接池 • 11g 数据库特性 • 允许多个 Oracle 客户端共享一个数据库驻留会话池 • USERID 必须匹配 • 可以逐个控制每个应用程序的连接共享 • 所有中间层实例间共享的会话池 • 用在 RAC 中 • 具有高度可伸缩性,支持数万个数据库连接 • 无需更改应用程序代码 DRCP 功能 • DBA 可以选择是否在服务器上启用连接池 • 连接池的最小连接数、最大连接数、超时等 • 定向到数据库驻留连接池的客户端 • 客户端连接字符串: • 主机名/服务:POOLED • (SERVER=POOLED) DRCP:共享边界 • 只有以“scott”身份登录的客户端才能共享连接池中的其 他“scott”连接 • CONNECTION_CLASS • 允许对用户连接进行进一步分类 • 使用不同连接类的客户端之间不共享 • 仅“user.connection_class”相同的客户端共享连接 • 对区分具有相同用户名的不同应用程序很有用 DRCP:PHP 视图 • 下载具有连接池功能、用于 11g 的新 oci8 扩展 • 在连接字符串中设置“:POOLED” • 设置 oci8.connection_class = “<您的字符串>" • 在所有可以共享连接的 apache 服务器上使用相同的设置。 • 无需更改应用程序代码 • 启用极其简单 最佳实践 • 对于应用程序开发人员 • 不需要时不要占用连接池里的连接 • 不要等脚本隐式关闭连接 • 占用连接时,不要尝试交错其他工作(如静态内容) • 对于管理员 • 确定为一个应用程序服务的所有 apache 实例 • 相应修改 php.ini connection_class 设置 客户端查询结果缓存 客户端查询结果缓存 • 部署期间启用缓存 • 无需更改 OCI 应用程序、OCI 驱动程序 • 可选的 SQL 提示 • 11g 进行中 • 快速的查询缓存访问 • 在多线程/连接池中共享 • 客户端匹配 => 无服务器执行或提取 • 无效操作 • 数据库更改(DDL、DML、安全性) • 会话状态更改 • RAC 一致性 • 在 OCI 上构建的驱动程序缓存查询: • PHP、ODP.Net、JDBC-OCI、OCCI、ODBC、Precomp 等 • OCI 上的自定义抽象层 总结 • Oracle 数据库增强了 PHP 应用程序 的可伸缩性和健壮性 • Oracle 数据库 11g 带来了新的可伸缩性机制 • PHP 应用程序可以通过 11g 新的 oci8 扩展使用这些新 功能 上述内容旨在勾勒我们产品的大致发展方向。而且, 该演示只用于提供信息,不会并入任何合同。该演示 不承诺提供任何材料、代码或功能,不应据此做出购 买决定。 所述 Oracle 产品的任何功能或特性的开发、发布和 上市时间由 Oracle 自行决定。 Oracle 技术网 PHP 开发人员中心 • 文章 • 安装指南 • PHP 与 Oracle 秘 密手册 • 在线论坛 • Oracle JDeveloper 10g PHP 扩展 http://oracle.com/technology/global/cn/ tech/php Oracle 资源 • OTN PHP 开发人员中心 • PHP 与 Oracle 秘密手册 • 文章、FAQ、网志链接、JDeveloper PHP 扩展、Zend Core for Oracle • http://www.oracle.com/technology/global/cn/tech/php • 信息 • christopher.jones@oracle.com • blogs.oracle.com/opal • ISV 和硬件供应商 oraclepartnernetwork.oracle.com

还剩50页未读

继续阅读

下载pdf到电脑,查找使用更方便

pdf的实际排版效果,会与网站的显示效果略有不同!!

需要 6 金币 [ 分享pdf获得金币 ] 0 人已下载

下载pdf

pdf贡献者

eliayng

贡献于2013-05-19

下载需要 6 金币 [金币充值 ]
亲,您也可以通过 分享原创pdf 来获得金币奖励!
下载pdf