`
hongtoushizi
  • 浏览: 371011 次
  • 性别: Icon_minigender_1
  • 来自: 天津
社区版块
存档分类
最新评论

PHP怎样连接数据库效率高?

    博客分类:
  • php
php 
阅读更多

整理的一个在phpchina的一个问题:
1.用mysql_connect()函数建立一个单例类,比如:
[code=PHP]class DB
{
        private static $db=NULL;       
        private        function __construct()
        {
                ;
        }
        public static function conn()
        {
                if(self::$db==NULL)       
                {
                        self::$db=mysql_connect('localhost','root','****');
                }
                return self::$db;
        }[/code]2.直接使用pconnect长连接
3.建立一个数据库操作类,构建实例的时候连接数据库,销毁的时候关闭连接(mysql_close)
4.优先采用长连接PHP代码
[code="PHP"]if(mysql_pconnect())
{
     $conn=mysql_pconnect();
}else{
   $conn=mysql_connect();
}[/code]以上四个方式采用哪个性能高?或者针对不同的并发情况,什么场景使用什么连接较好?

 

有人回答如下:

 

在php层面,无论你怎么写代码,都是半斤八两,没啥区别。我来强调下长连接和普通链接的区别:
    永久链接并不是说,服务器打开了一个连接,然后所有的人都共享这个链接。永久连接一样是每个客户端来就打开一个连接,有200人访问就有200个连接。其 实mysql_pconnect()本身并没有做太多的处理, 它唯一做的只是在php运行结束后不主动close掉mysql的连接.
     在php经cgi方式运行时pconnect和connect是基本没有区别的, 因为cgi方式是每一个php访问起一个进程, 访问结束后进程也就结束了, 资源也全释放了. 当php以apache模块方式运行时, 由于apache有使用进程池, 一个httpd进程结束后会被放回进程池, 这也就使得用pconnect打开的的那个mysql连接资源不被释放, 于是有下一个连接请求时就可以被复用.这就使得在apache并发访问量不大的时候, 由于使用了pconnect, php节省了反复连接db的时间, 使得访问速度加快. 这应该是比较好理解的. 但是在apache并发访问量大的时候, 如果使用pconnect, 会由于之前的一些httpd进程占用的mysql连接没有close, 则可能会因为mysql已经达到最大连接着, 使得之后的一些请求永远得不到满足.若mysql最大连接数设为500, 而apache的最大同时访问数设为2000,假设所有访问都会要求访问db, 而且操作时间会比较长,当前500个请求的httpd都没有结束的时候,之后的httd进程都是无法连接到mysql的(因已经达到mysql最大连接 数). 只有当前500个httpd进程结束或被复用才可以连接得到了mysql
     当db操作复杂, 耗时较长时, 因httpd会fork很多并发进程处理, 而先产生的httpd进程不释放db连接, 使得后产生的httpd进程无法连上db. 因为这样没有复用其它httpd进程的mysql连接. 于是会就产生很多连接超时。 在并发访问量不高时,使用pconnect可以简单提高访问速度, 但在并发量增大后, 是否再使用pconnect就要看程序员的选择了.
     php对mysql的连接并没有真正用到连接池, pconnect也只是相当于借了apache的进程池来用, 所以在并发访问量大的时候pconnect并不能很好的提高访问db效率.
      在实际的应用中,用mysql_pconnect的话,每次刷新和请求新的页面都比较快,而用mysql_connect的话,每次刷新都要重新请求,当数据库连接比较慢的时候,就能看出差异了。当你的数据库连接比较慢,DB操作不是很复杂,并且你对自己的程序足够自信,不会产生死锁的时候,且你对服务器有控制权的话,满足以上四个条件中的任意两个,那么就可以用 pconnect。
pconnect不用在脚本里关闭,可以在mysql中设置lifetime,也可以写shell定期扫描,kill掉休眠过长的连接。 一句话总结:要用好pconnect,不仅仅是php脚本的事 还关系到数据库和服务器的设置。

 

 

分享到:
评论

相关推荐

    java 连接数据库实现用户登录功能

    在Java编程中,连接数据库以实现...在实际项目中,还应该考虑错误处理、事务管理和数据库连接池等高级特性,以提高系统的稳定性和效率。在提供的`README.md`文件中,可能会有更多关于如何运行和设置该项目的详细说明。

    tp5(ThinkPHP 5.1)连接达梦数据库源码

    而达梦数据库(DAMENG DBMS)则是一种高性能的关系型数据库管理系统,尤其在处理大数据量和高并发场景下表现出色。本文将详细探讨如何使用ThinkPHP 5.1连接达梦数据库,以及相关的源码实现。 首先,我们需要了解...

    一个php连接mysql数据库操作类库.zip

    在PHP编程中,连接并操作MySQL数据库是一项基本任务。这个"一个php连接mysql数据库操作类库.zip"压缩包提供了一个全面的PHP类库,旨在简化这个过程,它包含了一系列用于执行常见数据库操作的方法,如查询、更新和...

    php+mysql连接数据库

    ### PHP与MySQL数据库连接知识点详解 #### 一、引言 在Web开发领域,PHP(Hypertext Preprocessor)是一种广泛使用的开源服务器端脚本语言,特别适合于Web开发并可嵌入HTML中。MySQL则是一款关系型数据库管理系统...

    flex连接数据库的三种方法

    根据给定的文件信息,以下是关于“Flex连接数据库的三种方法”的详细知识点: ### Flex连接数据库的方法概述 Flex是Adobe公司推出的一种用于构建高性能、高交互性的RIA(Rich Internet Applications)的应用程序...

    一个mysql数据库连接类

    总的来说,这个“mysql数据库连接类”为PHP开发者提供了一种结构化、可复用的方式来处理MySQL数据库连接,提高了代码的可维护性和效率。通过理解和运用这个类,开发者能够更专注于业务逻辑,而不是底层的数据库操作...

    PHP轻量级数据库框架PHP更简单高效的数据库操作方式

    从提供的压缩包文件名"upfor-juggler-7b1f55f"来看,这可能是一个名为Juggler的PHP数据库框架的版本。尽管没有具体代码可供分析,但可以推测Juggler可能包含了一些上述特性,如查询构建、ORM、事务处理等,旨在简化...

    php数据库操作大全源代码

    "PHP数据库操作大全源代码" 提供了丰富的示例,帮助开发者理解和掌握如何在PHP中与数据库进行交互。这个资源可能包含了诸如连接数据库、执行查询、插入数据、更新记录、删除数据等常见操作的代码实例。 首先,我们...

    DBeaver连接达梦|虚谷|人大金仓等国产数据库

    总的来说,DBeaver作为一个强大的数据库工具,不仅能够方便地与国产数据库进行交互,还使得开发者和数据库管理员能够更高效地管理和开发各种数据库系统,降低了不同数据库之间的学习成本,提升了工作效率。...

    php连接mysql数据库的类库

    在PHP编程中,连接MySQL数据库是一项基础且重要的任务。标题提到的"php连接mysql数据库的类库"是一种自定义封装的工具,它原本是用于连接Oracle数据库,但经过改造后,现在可以用来与MySQL数据库进行交互。这个类库...

    PHP数据库连接

    在探讨“PHP数据库连接”这一主题时,...通过本文的介绍,相信读者对PHP数据库连接有了更深刻的理解,同时也鼓励大家在实际项目中多加实践,不断探索和优化数据库操作的技巧,为构建高性能的Web应用打下坚实的基础。

    用PHP实现WWW与数据库连接的研究.pdf

    接着,文章对 PHP 的工作原理和特性进行了详细的介绍,包括开放源码、简单语言、跨平台、效率高、数据库模块等特性。最后,文章对 PHP 在实现 WWW 与数据库连接方面的应用进行了详细的介绍。 重要知识点: 1. Web ...

    各种数据库架包及连接数据库代码

    3. **Oracle**:全球最大的数据库供应商之一,提供高性能、高可用性的企业级数据库解决方案。Oracle数据库支持分布式数据库系统,具备强大的数据安全性和完整性保障,适合大型企业和关键业务应用。 4. **DWR ...

    基于Swoole的通用连接池实现常用来作为数据库连接池

    “A common connection pool based on Swoole is usually used as a database connection pool.” 描述进一步明确了这个实现的目标,即创建一个常见的Swoole连接池,它被设计用于数据库连接的复用...

    php数据库访问封装类集合

    本文将深入探讨“php数据库访问封装类集合”这一主题,它包含了多种数据库访问实现方式,旨在为开发者提供更多的选择和支持。 首先,我们要理解数据库访问封装类的基本概念。这种类通常会包含连接、查询、执行SQL...

    PHP版ip数据库,比sql更好,更快

    总结来说,这个PHP版IP数据库可能是一个优化过的解决方案,针对IP地址查询提供更高的效率和性能,特别适合那些需要频繁处理IP信息的Web应用。然而,具体使用效果和适用场景还需要根据实际测试和项目需求来判断。在...

    wamp5(快速连接数据库)

    **Wamp5:快速连接数据库** Wamp5是一款在Windows平台上搭建本地Web开发环境的工具,它集成了Apache服务器、MySQL数据库和PHP编程语言。这个软件包的主要目标是简化数据库的管理和开发,使得开发者能够快速地创建、...

    php版mysql大数据库备份和恢复工具

    5.鉴于上面特别说明4,如果你是从MySQL 4.0.X/MySQL 3的老数据版本导入到MySQL 4.1/MySQL 5的高数据库版本,导入时请选择GBK编码.如果是UTF8编码的数据,如我的博客(http://www.zhouliang.name)采用WordPress程序,默认...

    PHP对数据库的访问技术及执行效率的比较.pdf

    "PHP对数据库的访问技术及执行效率的比较" 概述: 本文档对PHP对数据库的访问技术进行了系统的总结和比较。主要讨论了PHP对MySQL、Microsoft Access、Microsoft SQL Server等三种数据库的访问技术,包括数据库函数...

    php数据库备份

    因此,在实际应用中,应确保对输入进行验证,并考虑使用更安全的PHP数据库库,如PDO或MySQLi,它们提供了更高级别的接口来进行数据库操作和备份。同时,为了提高效率和可靠性,备份过程应该异步执行,并定期测试恢复...

Global site tag (gtag.js) - Google Analytics