如何阻止PDO建立连接直到第一个查询?

时间:2013-06-15 07:49:37

标签: php pdo

我在每次执行脚本时建立与数据库的连接。这是通过将PDO实例分配给全局$db变量来完成的,然后将该变量传递给控制器​​。

$db = new \ay\pdo\PDO('mysql:dbname=foo;charset=utf8');

但是,由于存在缓存逻辑层,因此95%的请求不需要执行单个查询。虽然建立连接的5ms似乎并不重要,但它占请求时间的30%。每分钟提供高达200K的请求时,这是一个重要的数字。

app

我想只在有要执行的查询时建立与数据库的连接。在不对脚本施加大量开销的情况下,实现此目的的推荐方法是什么?

2 个答案:

答案 0 :(得分:2)

您可以/可以使用代理设计模式。因此,当您第一次请求数据时,它将处理/创建与db的连接。

因此,直接使用PDO创建代理对象,当有查询时,它会创建与db的连接,并查询它(延迟加载),之后它将重用相同的PDO对象。

http://en.wikipedia.org/wiki/Proxy_pattern

http://en.wikipedia.org/wiki/Flyweight_pattern

代理示例:https://github.com/ezimuel/PHP-design-patterns/blob/master/Proxy.php

答案 1 :(得分:1)

而不是使用$ db->方法,使用db() - >方法。 db()将是pbject中的函数或函数,它返回单例db对象/如果存在连接,则返回该函数或函数,否则创建它并返回它。

编辑:参考评论,或许单身或全局功能不是你想要的。无论如何,我得到的是你可以创建一个具有所有连接参数的对象$ db,但是没有创建连接。然后你可以打电话给

$db->getDb()->method 

和getDb()将首先检查$ db是否有连接,如果没有。然后它创造它。你必须在每次调用之前有getDb(),或者在$ db对象内部。