1

我的网站上有使用数据库的页面和不使用数据库的页面。

当我需要数据库时,我使用$conn = connect(). 但这意味着我需要把它放在任何需要的地方。如果我将它放在一个包含文件中并将该文件放入每个页面中,即使不需要数据库,它也会连接。这是个好主意吗?在不需要时创建连接会导致问题或其他问题,还是应该仅在需要时连接?

4

1 回答 1

1

当您不需要引入少量可避免的开销时连接到数据库。如果您需要您的页面尽可能快地运行,那么您可以通过避免不必要的数据库连接来进行优化。

这代表多少开销占您的总 PHP 执行时间的比例会有所不同,例如,如果您的 PHP 脚本简单快速,那么按比例来说,数据库连接占总时间浪费的比例更大。如果您的 PHP 脚本做了很多其他事情,那么 db 连接占总时间的百分比较小。

此外,数据库连接的速度可能会有所不同,具体取决于服务器的速度、MySQL 是否配置了 DNS 依赖等。

当我在 Zend 框架上工作时,我们实现了“惰性”连接。您可以随时创建 Zend_Db_Adapter 对象的实例,但该类不连接到类构造函数。当您运行第一个查询(或显式调用该getConnection()方法时)时,它会连接到数据库。

另一个考虑因素是,当您完成运行查询后,您多久会断开与数据库的连接。

假设您每秒处理 1000 个 PHP 请求(平均每毫秒一个),并且每个 PHP 请求持续 100 毫秒。因此,在任何给定时刻,您平均可能有 100 个 PHP 请求在进行中。如果您的 PHP 代码做的第一件事是连接到数据库,而它做的最后一件事是断开与数据库和其他资源的连接(通过自动请求清理),那么您随时可能有 100 个数据库连接处于活动状态。

但是,如果您延迟连接到数据库,并在完成对数据库的查询后立即断开连接,并避免在某些请求上完全连接,那么平均而言,您的并发数据库会话数会少得多。

这有助于减少数据库服务器上的资源使用,允许更高的吞吐量和每秒完成的更多 PHP 请求。

于 2013-11-12T20:14:26.253 回答