【问题标题】:Automatically delete outdated rows from database every n seconds每 n 秒自动从数据库中删除过时的行
【发布时间】:2017-04-03 07:07:47
【问题描述】:

我有一个包含时间戳列的数据库,我希望删除过时的数据。

所以我的想法是将 MySQL 查询写入 .php 文件,该文件删除 timestamp < current_timestamp - const 所在的每一行。由于需要检查很多行,因此我将为时间戳列设置索引。

那么我怎样才能每隔 n 秒自动运行这个脚本呢?我听说过 Linux crontab - 我可以在我的网络服务器(而不是数据库服务器)上使用它来定期执行 .php 文件吗?这总体上是从数据库中删除过时行的好方法吗?

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

【问题讨论】:

    标签: mysql linux amazon-web-services


    【解决方案1】:

    Gordon Linoff 的方法非常理想,但如果您想走计划作业的路线,您可以尝试使用 MySQL Event Scheduler。以下示例每天运行并删除一周前的记录。

    CREATE EVENT
      clean_my_table
    ON SCHEDULE EVERY 1 DAY
    DO
      DELETE FROM my_table
      WHERE time_stamp < date_sub(now(), INTERVAL 1 WEEK);
    

    MySQL 事件参考页面 https://dev.mysql.com/doc/refman/5.7/en/create-event.html

    【讨论】:

      【解决方案2】:

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

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

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

      然后使用此视图访问数据。

      然后,定期清理表格以删除您不想要的行。您可以每天一次、每周一次、每小时一次执行此操作——删除可能会在数据库负载较轻的时候发生,因此不会影响用户。

      【讨论】:

        【解决方案3】:

        我认为您应该查看 AWS 上的 lambda 服务。 它允许您在不运行其他实例的情况下针对 AWS 服务运行命令。

        以下是有关如何设置的示例。 http://docs.aws.amazon.com/lambda/latest/dg/vpc-rds-deployment-pkg.html

        祝你好运 尤金

        【讨论】:

          猜你喜欢
          • 2017-07-13
          • 2014-03-04
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2019-03-18
          • 1970-01-01
          • 2016-08-24
          • 1970-01-01
          相关资源
          最近更新 更多