未使用的mysql连接会减慢脚本吗?

时间:2012-01-17 19:17:31

标签: php mysql api class database-connection

我正在为我的网站编写API,还有一个非常大的类来处理所有的API请求。

大多数网页,如果不是网站上的所有网页,都会在加载时向api发送至少一个请求。这个网站最重要的优先事项是效率,结果是非常快速的服务器处理。

因此,当涉及到类和某些PHP函数时,我正在寻求一些建议。

首先,看起来我正在编写的类可能最终会有大约3000行代码。如果在每个页面上初始化,忽略每个页面中只使用一个或两个函数的事实,这会使API更慢吗?我是否应该为每个类方法查看具有类扩展的单独文件?

其次,我目前在目录中的单独文件中拥有与各种数据库的所有连接。每个连接中都有函数mysql_pconnect()。目前,我只在需要时才需要这些文件。因此,如果该方法需要连接到x数据库,那么我只需将require(connection ...)放入方法中。在一个类中包含文件是不是很糟糕?

我问,因为唯一的其他解决方案是要求页面顶部的所有连接,以便类可以访问它们,而不需要为每个方法使用它们。这就是为什么我想知道是否一次连接多个连接,即使它们没有被使用,也会对服务器造成负担?

真的有三个问题:

  1. 在每个页面的开头启动一个大类会减慢脚本运行时间,即使只使用了一个类方法吗?这就是人们使用'class extends class'的原因吗?
  2. 类中的'require()'文件不好吗?
  3. 与mysql数据库的未使用连接会减慢脚本的运行时间吗?

2 个答案:

答案 0 :(得分:3)

不,未使用的MySQL连接不会消耗太多(如果有的话)cpu时间,尽管它会占用一些内存来处理必须在每个连接基础上维护的“状态”的各个位。

但请注意,MySQL的连接协议实际上相当“轻量级”。维护一个持久连接池听起来很有吸引力,但无论如何建立新连接的成本已经非常低了。

持久连接是解决连接开销的快速解决方案,但它们确实会带来问题。最糟糕的是被放弃的连接会使连接处于不确定的状态(进行中的事务,更改服务器变量/配置等等),除非你非常小心,否则你很容易造成无意的死锁。

答案 1 :(得分:1)

如果您正在编写api来将数据从数据库提供给多个第三方,那么最好不要让他们查询数据库,甚至不通过Web服务(除非您有这些第三方的第二到第二次数据库突变需要立即)

更好的方法是将xml文件写入受保护的位置,并使用Web服务来授权第三方并提供xml文件。 然后定期更新xml。