PHP为了记录目的而与MySQL建立另一个连接需要额外的时间

时间:2017-12-08 00:04:09

标签: php mysql

我有各种PHP脚本通过cron作业全天运行,随着越来越多的用户使用我的应用程序,cron作业需要更长的时间。当我从文件记录迁移到数据库记录时,这些作业开始花费两倍的时间,因为(我相信)日志记录功能需要时间来建立与数据库的新连接 - 大约每秒一秒。

我的结构如下。 cron作业运行的脚本如下所示:

<?php
require("db-helper-class.php");
require("action-class.php");

$con = new DB();
$action = new ActionClass($con);

$action->method_1();

&#34;行动类&#34;看起来像这样:

<?php 
include "logging-functions.php";

class ActionClass {

    private $db;

    public function __construct(DB $pdo) {
        //connect to database
        $this->db = $pdo;
    }

    public function method_1() {
        //do stuff like a database action
        $sql = "...";
        $this->db->$query($sql)

        //log result        
        logSomething($vars);

        //do another database action
        $sql = "...";
        $this->db->$query($sql)

        //log result        
        logSomething($vars);

    }
...

&#34; logging-functions.php&#34;看起来像这样:

<?php 
require_once("db-helper-class.php");

function logSomething($input) {
    $logDBcon = new DB();
    $sql = "...";
    $logDBcon->query($sql);
    ...
}

正如您所看到的,在记录时,会发生多个新连接。我有两个主要问题:

  1. 我说得对,因为新的连接,我的额外日志连接是一个慢点。
  2. 如果我将记录保存在原始连接中,我会说lastInsertId()会丢失吗?
  3. 并且潜入第三个问题,这个设计是最佳实践吗?

1 个答案:

答案 0 :(得分:0)

  1. 是的,没有。当然,建立连接需要时间,但这是微不足道的,所以你甚至不应该打扰。如果您的查询速度很慢,那么使您的应用程序变慢的原因就是。
  2. 问题不明确。如果对连接运行get insert id命令,它将返回最后一次为该连接插入的id。阅读:这两个连接彼此隔离。
  3. 我会说不,因为每当你调用那个日志记录方法时,你就会开始/关闭(顺便说一句,你应该注意关闭连接)大量的连接。我打开一个连接,并在程序完成后立即将其关闭。
  4. 隐藏旁注:考虑最佳实践,你应该在SO上创建一个新问题,因为那些问题通常都很臃肿。所以这个问题确实是偷偷摸摸的。