PHP通过JAVA桥使用连接池提高性能

原文:http://hi.baidu.com/zhangsilly/item/48ee731080ac36cc39cb30ab

我一直在寻求一个连接池解决方案,特别是在主要使用Oracle之后

注意:以下观点仅来自于小量的benchmark

测试环境:
1G RAM
Intel Pentium D 2.8G(双核)
OS: Windows XP (Linux机器效率应该高一些,因为Linux可以通过java.so扩展连接Bridge,测试采用Pure PHP的代码连接的Bridge)
PHP:5.29
MySQL5
Oracle 10g
PHP JavaBridge 5.411
Tomcat 6.018
Java SDK 1.60 update 11

自从使用Java桥之后,我一直想为PHP找一个连接池来解决现在遇到的问题(现在很多东西运行在Oracle上,PHP搭配Oracle真的比想象得要慢好多)。很容易,通过php java桥使用连接池非常简单(废话,PHP通过socket和java打交道,将资源交给java管理就可以了),测试结果如下:

对MySQL:
PHP直连MySQL:1100 ~ 1300 次请求/秒
PHP通过Java桥、DBCP连接MySQL:250 ~ 300 次请求/秒

对Oracle:
PHP直连:30 ~ 33 次请求/秒
PHP通过Java桥、DBCP连接Oracle:120 ~ 135 次请求/秒

上面的测试,发现如果使用MySQL的话,还真是用不着数据库连接池(这种通过Bridge的中间环节过多,还设计到数据的包装、解包操作)。如果使用Oracle的话,数据库连接池就大有可为了(即使增加了本地的请求,数据包装、解包等操作,仍然还是值得的),使用连接池之后,性能真的大幅上升(并未采用 prepareStatement 软解析预编译语句、SQL语句全部 hard code, 没有开启 poolPreparedStatements 缓冲)。

数据库连接池直接采用Tomcat自带的DBCP完成,配置默认,增加removeAbandoned=true validationQuery="select 1 from dual"。为保证公平性,直连、Bridge均执行想听那个的SQL并完成绝对相同的流程。

时间: 2024-10-26 16:32:17

PHP通过JAVA桥使用连接池提高性能的相关文章

java 断开从连接池中获取的连接,规范的操作是怎样的

问题描述 java断开从连接池中获取的连接,规范的操作是怎样的,ResultSet,PreparedStatement,Connection是否需要依次关闭,若需要,应该怎么做才是高效率,规范,而且不会发生内存泄露.涉及到很多try和catch,不知怎么处理. 解决方案 解决方案二:ResultSet,PreparedStatement,Connection是否需要依次关闭需要应该怎么做才是高效率写一个函数用来关闭,如放在的帮助类JdbcUtil里,如publicstaticvoidreleas

用连接池提高Servlet访问数据库的效率 (-)

servlet|访问|数据|数据库 Java Servlet作为首选的服务器端数据处理技术,正在迅速取代CGI脚本.Servlet超越CGI的优势之一在于,不仅多个请求可以共享公用资源,而且还可以在不同用户请求之间保留持续数据.本文介绍一种充分发挥该特色的实用技术,即数据库连接池. 一.实现连接池的意义 动态Web站点往往用数据库存储的信息生成Web页面,每一个页面请求导致一次数据库访问.连接数据库不仅要开销一定的通讯和内存资源,还必须完成用户验证.安全上下文配置这类任务,因而往往成为最为耗时的

java配置dbcp连接池(数据库连接池)示例分享_java

使用jar包:commons-dbcp-1.4.jar.commons-pool-1.6.jar.commons-logging-1.1.3.jar,另外还有数据库的jdbc驱动,适用java6及以上平台 连接池管理类 复制代码 代码如下: package cn.songxinqiang.samples.commonsdbcp.util; import java.sql.Connection;import java.sql.DatabaseMetaData;import java.sql.SQL

用连接池提高Servlet访问数据库的效率(1)_JSP编程

Java Servlet作为首选的服务器端数据处理技术,正在迅速取代CGI脚本.Servlet超越CGI的优势之一在于,不仅多个请求可以共享公用资源,而且还可以在不同用户请求之间保留持续数据.本文介绍一种充分发挥该特色的实用技术,即数据库连接池. 一.实现连接池的意义 动态Web站点往往用数据库存储的信息生成Web页面,每一个页面请求导致一次数据库访问.连接数据库不仅要开销一定的通讯和内存资源,还必须完成用户验证.安全上下文配置这类任务,因而往往成为最为耗时的操作.当然,实际的连接时间开销千变万

用连接池提高Servlet访问数据库的效率(2)

servlet 三.类DBConnectionPool说明 该类在209至345行实现,它表示指向某个数据库的连接池.数据库由JDBC URL标识.一个JDBC URL由三部分组成:协议标识(总是jdbc),驱动程序标识(如 odbc.idb.oracle等),数据库标识(其格式依赖于驱动程序).例如,jdbc:odbc:demo,即是一个指向demo数据库的JDBC URL,而且访问该数据库要使用JDBC-ODBC驱动程序.每个连接池都有一个供客户程序使用的名字以及可选的用户帐号.密码.最大连

Java Hibernate 之连接池详解

Hibernate支持第三方的连接池,官方推荐的连接池是C3P0,Proxool,以及DBCP.在配置连接池时需要注意的有三点: 一.Apche的DBCP在Hibernate2中受支持,但在Hibernate3中已经不再推荐使用,官方的解释是这个连接池存在缺陷.如果你因为某种原因需要在Hibernate3中使用DBCP,建议采用JNDI方式. 二.默认情况下(即没有配置连接池的情况下),Hibernate会采用内建的连接池.但这个连接池性能不佳,且存在诸多BUG(笔者就曾在Mysql环境下被八小

Socket网络编程学习笔记(6):使用线程池提高性能(完)

在前几篇介绍中,不论是服务端的侦听还是客户端的连接都是通过新建一个 线程去执行特定功能的.在这种情况下,一量有一个新客户端需要连接,则又得 创建新的线程,而当程序创建新线程时,往往需要大量的内部开销,这对程序的 性能有一定的影响.在.NET库中提供了一种方法,可以避免一些开销.而在 Socket通讯中还有另一种访求那就是异步Socket,我不知道用这种方式的性能如 何,在这里且不管这种形式,主要来看一下用线程池解决问题. Windows操作系允许用户维持一池"预先建立的"线程,这个线程

Apache Geronimo JNDI命名和Java资源连接池,第1部分: 数据源连接

利用 JNDI 访问数据源.Java 消息服务.邮件会话和 URL 连接的连接池 了解 JNDI JNDI 是一种应用程序编程接口 (API) 或库,它为应用程序提供了将名称与对象关联起来以及根据对象的名称在目录中查找对象的方法.本文是系列教程的第一部分,阅读本文可以让您了解如何将 Geronimo.JNDI 与数据源连接池相互关联起来,如何构建数据源连接,以及如何利用 JNDI 在一个简单的 Geronimo 应用程序(称为 Customer Service 实用程序)内访问该连接. 数据源

【最近面试遇到的一些问题】数据库连接池的优点和原理,常用的java开源连接池组件

数据库连接是一种关键的有限的昂贵的资源,这一点在多用户的网页应用程序中体现得尤为突出.对数据库连接的管理能显著影响到整个应用程序的伸缩性和健壮性,影响到程序的性能指标.数据库连接池正是针对这个问题提出来的.数据库连接池负责分配.管理和释放数据库连接,它允许应用程序重复使用一个现有的数据库连接,而再不是重新建立一个:释放空闲时间超过最大空闲时间的数据库连接来避免因为没有释放数据库连接而引起的数据库连接遗漏.这项技术能明显提高对数据库操作的性能. 影响因素 数据库连接池在初始化时将创建一定数量的数据