2016-11-19 37 views
2

我有一个数据库,它有一个时间戳列,我希望过期的数据被删除。每n秒自动从数据库中删除过时的行

所以我的想法是写一个.php文件的MySQL查询,删除每一行,其中timestamp < current_timestamp - const。由于会有很多行需要检查,我将设置索引到时间戳列。

那么如何每n秒自动运行一次这个脚本呢?我听说过Linux crontab - 我可以在我的web服务器(而不是数据库服务器)上使用它来定期执行.php文件,这是从数据库中删除过期行的一种很好的技术吗?

数据库在Amazon Web Services上的RDS实例上设置。我的网络服务器是一个EC2实例(也是亚马逊网络服务)。

回答

4

做这样的事情需要设置一个事件或工作。这种努力使数据库非常繁忙。

我强烈推荐一种不同的方法。使用视图来访问你想要的数据:

create view v_t as 
    select t.* 
    from t 
    where timestamp > CURRENT_TIMESTAMP - ??; 

然后用这个视图来访问数据。

然后,定期清理表格以摆脱不需要的行。您可以每天一次,每周一次,每小时一次 - 可以在数据库负载较轻时发生删除,因此不会影响用户。