【问题标题】:PHP - Zend Framework - Using static methods for data accessPHP - Zend 框架 - 使用静态方法进行数据访问
【发布时间】:2011-09-22 04:22:25
【问题描述】:

我一直在网上阅读有关使用静态方法从数据库访问数据的优缺点。我有一个基于 Zend 框架的基于 LAMP 的站点。

有人说在性能方面 - Greg Beech 的分析在此引用的几乎没有任何区别

在调用一个方法 20 亿次时,您可以通过将其设为静态来节省大约 5 毫秒,这对于每个方法调用几乎没有节省

但是,如果我正确理解静态方法的概念 - 只有一个方法实例,这意味着只有一个数据库连接 - 所以在高流量网站上 - 当一个请求正在处理时 - 其他请求将排队等待同样的方法对吗?

所以只是想了解一下将访问方法声明为静态是否有意义的想法和意见。

非常感谢

【问题讨论】:

    标签: php zend-framework static zend-db static-methods


    【解决方案1】:

    我认为您可能对这里的流程有一个偏差的理解。

    单个访问者的每个单独请求都完全相互独立地提供服务。想象一下这两个独立的请求:

    Request visitor 1              Request visitor 2
    
    index.php                      index.php
    creates Zend_Db instance $db   creates Zend_Db instance $db
    calls $db->insert()            calls $db->insert()
    calls $db->insert() again      calls $db->insert() again
    
                        \        /
                         \      /
                          \    /
    
                         Database
               Queue might be something like:
    
                 4. insert 2 from request 2
                 3. insert 2 from request 1
                 2. insert 1 from request 2
                 1. insert 1 from request 1
    

    换句话说:基本上只有数据库本身遇到SQL语句排队的问题。

    PHP 脚本彼此独立工作。因此,您是创建实例方法还是静态方法与 SQL 查询的排队方式完全无关。

    【讨论】:

    • 感谢您的解释-那么通过静态方法或实例方法访问数据有什么区别
    【解决方案2】:

    静态方法并不一定意味着只有一个,这意味着您不需要类的实例来调用方法。 Singleton Pattern 如果您只希望一个对象的实例在请求的生命周期内存在,则可以使用。

    每个请求页面的用户都会获得他们自己的该对象实例,但他们只能拥有一个。

    正如 fireeyedboy 所说,数据库将负责在请求进入时对其进行排队。在请求大量涌入的情况下,每个页面与数据库交互的调用可能必须等待更早的请求被处理首先,导致处理延迟。

    【讨论】:

      猜你喜欢
      • 2012-08-18
      • 2012-04-19
      • 1970-01-01
      • 2012-06-03
      • 2014-08-02
      • 1970-01-01
      • 1970-01-01
      • 2011-06-30
      • 1970-01-01
      相关资源
      最近更新 更多