mysql—一种高效的内存方式,用于记录数据库blob列长期运行的php脚本

gcmastyq  于 2021-06-17  发布在  Mysql
关注(0)|答案(2)|浏览(277)

在将一个大字符串构建为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)
}
bfnvny8b

bfnvny8b1#

要附加到blob,当然需要有正确的id才能附加到blob或所有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
xeufq47z

xeufq47z2#

看起来您正在内存中积累一个非常大的字符串,等待在php进程结束时写入数据库。内存过度消耗是因为存储字符串的php变量,而不是来自数据库。
最好定期将数据写入数据库,并重新初始化phpvar以释放进程内存。
在mysql中,可以附加到 BLOB 使用 CONCAT function :

UPDATE log SET msg = CONCAT(msg, ?);

其中问号是php var的值。

相关问题