我正在开发一个Web应用程序(PHP / MySQL),其中我需要实现定时器(记录id
到期expiration_date
),其中到期涉及记录的state
正在更新并根据需要执行任意代码。
我基本上需要一个BPMN Timer事件。
我考虑的选项,我都不满意:
这在PHP应用程序中通常如何完成?
答案 0 :(得分:3)
以下是您未考虑的选项:
您可以使用MySQL Event Scheduler定期在数据库中运行存储的过期例程。
这种方法的一些好处:
缺点:
event_scheduler=on
放入my.cnf
或以其他方式启用它。示例:
DROP EVENT IF EXISTS expire_event;
DELIMITER //
CREATE EVENT expire_event
ON SCHEDULE EVERY 1 MINUTE
DO BEGIN
DELETE FROM data WHERE time < UNIX_TIMESTAMP(NOW() - INTERVAL 1 HOUR);
END //
DELIMITER ;
以上每分钟都会删除 data 表中任何行时间戳超过1小时的行。
答案 1 :(得分:2)
我也会选择cronjob选项。
然而,我也会在我的应用程序中拥有知道如何处理(或忽略)过期记录的逻辑。像cron这样的服务可以破解,所以 NOT 不得不依赖它。
不幸的是,DBMS并没有给我们带来这种灵活性,如果您遇到其中一条“过期”记录,您也不会想要进行数据库维护。
您最好通过查询,视图的使用或简单的应用程序逻辑来排除它们。
答案 2 :(得分:1)
我会选择 cronjob 选项。