内存有效的方法来记录长时间运行php脚本的数据库BLOB列

时间:2018-12-31 16:02:52

标签: php mysql

构建大型字符串作为BLOB后,我正在登录数据库表。我认为正在发生的问题是,随着时间的流逝,字符串变得非常大,从而导致php脚本上出现内存问题。我可以将字符串写入文件,但是仍然需要将其加载到内存中才能登录到mysql。

有什么方法可以在不导致Web服务器上出现内存问题的情况下

示例

$this->log("1");
$this->log("2");
$this->log("3");
$this->log("4");
....
function log($msg)
{
  $this->log.=$msg;
}

function save_log()
{
      insert into log ('msg') VALUES ($this->log)
}

2 个答案:

答案 0 :(得分:3)

似乎您正在内存中累积一个非常大的字符串,等待在php过程结束时将其写入数据库。您的php var存储空间消耗过多,而不是从数据库存储字符串。

最好定期将数据写入数据库,然后重新初始化php var以释放进程内存。

在mysql中,您可以使用BLOB

CONCAT function :


附加到UPDATE log SET msg = CONCAT(msg, ?);

问号是php var的值。

答案 1 :(得分:2)

要附加到一个Blob,当然,您需要具有正确的ID堡垒,否则所有Blob都会被附加。

update log set msg = concat(msg, "test to append");

另一方面,我不会创建无法读取或搜索的大斑点。 我将创建一个包含日志ID的日志表,并创建日期和更新日期。然后使用各个日志项创建一个数据库,并为其提供指向日志ID的链接。

这将使日志易于搜索。

log_id  log_name  log_create   log_update
1       userlog   2018-31-12   2018-31-12 19:37

item_id   log_id item_create        item_text
1         1      2018-31-12 19:37   the text of the log event