我正在实现在现有脚本中使用找到here的mysql类。该脚本几乎总是需要与数据库进行交互,即使有时也不需要。在这种情况下,最佳做法是什么?我应该打开一个连接并保持打开直到脚本结束,还是应该在需要时打开连接,在完成后关闭它,以避免在脚本不需要时打开连接?
答案 0 :(得分:13)
由于连接相当昂贵,正如其他人所指出的那样,我建议在数据库层使用“延迟连接”技术。如果您有效地构建了应用程序,那么应用程序逻辑不应该关注何时打开和关闭连接,因为这将封装在数据库层中。当被要求执行查询时,数据库层将首先检查它是否具有活动连接,如果没有,则创建一个。这样您就可以避免打开从未使用过的连接,并且您的应用程序和数据库代码之间也可以很好地分离逻辑。
答案 1 :(得分:2)
好吧,如果您正在使用类,则在实例化类或执行第一个查询时应自动打开连接。如果您从不使用该类,则不会打开连接。虽然在不需要它时关闭它是一个好习惯,但当请求线程死亡时关闭它并没有什么坏处。
如果您没有在php.ini文件中设置资源限制,这可能会很糟糕,请求可能永远存在并且永远不会关闭连接。
如果你有一个中到高流量的网站,你应该考虑使用mysql_pconnect,所以总是有一个连接打开,你不需要在每个请求上打开一个连接的开销。 / p>
答案 2 :(得分:1)
通常,您只需要在需要使用该连接时打开与数据库的连接。保持连接打开可能会增加部分代码意外或恶意通过其他人的操作导致对数据库执行不必要的查询的可能性。
在这种情况下,您应该只在打算运行查询之前打开连接。如果您有大量查询,请尽可能在过程的后期打开您的连接。
最好让一个连接打开一段时间比打开和关闭多个连接更长。
答案 3 :(得分:0)
如果您的代码对性能敏感,那么首选技术往往是使用某种形式的连接池和/或持久进程,这样您就可以打开一个数据库连接,然后使用该连接来处理许多页面请求而不是为每个需要的请求打开一个新连接。
如果您的代码对性能不敏感,那么无论如何它都无关紧要。
无论哪种方式,在处理特定请求的过程中访问数据库的确切时间并不是一个值得关注的原因。
我个人的做法是在生成新的处理程序进程时立即打开数据库连接,然后在我开始处理每个请求时验证它是否仍然存在。然后,其余代码可以自由地假设连接在需要时可用,而不会在用户等待响应时产生连接成本。