构建大型字符串作为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)
}
答案 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