0

我想做的事:

所以我的问题是:如何以优化的方式在 24 小时后自动删除条目。

你需要知道的:

我研究了一个解决方案,该解决方案还允许我删除与此数据库条目关联的文件。

我的想法:

我最初的想法是启动一个 Perl 脚本,如果最早的条目是在 24 小时前创建的,它将每小时检查一次丑陋,我相信有比这个更好的解决方案,更优化和优雅!

桌子:

UID, COUNT, VALUE_1, VALUE_2, ..., TIMESTAMP, LINK

如果你有什么灵感请告诉我!

4

4 回答 4

4

你可以使用 MySQL 的事件调度器:

  • 到期时自动删除此类记录:

    CREATE EVENT delete_expired_101
    ON SCHEDULE AT CURRENT_TIMESTAMP + INTERVAL 24 HOUR DO
    DELETE FROM my_table WHERE id = 101;
    
  • 定期自动清除所有过期记录:

    CREATE EVENT delete_all_expired
    ON SCHEDULE EVERY HOUR DO
    DELETE FROM my_table WHERE expiry < NOW();
    
于 2013-07-05T22:59:41.340 回答
1

将您的 sql 查询写入一个 php 文件,然后在该文件上设置一个 cron 作业。

cPanel 作为此功能内置且易于使用

http://docs.cpanel.net/twiki/bin/view/AllDocumentation/CpanelDocs/CronJobs

运行的命令看起来像这样

0   0   *   *   *   /usr/bin/lynx http://www.yourdomain.com/thefilexxx.php >/dev/null 2>&1

如果你没有 cPanel 看看这个

http://www.wikihow.com/Set-up-a-Crontab-File-on-Linux

另一个与cron 作业在 Linux 上每 6 小时运行一次 cron 作业相关的帖子

我现在才看到你对 PRPGFerret 的回复。您的 sql 条目是否有时间戳?更频繁地运行 cron 作业并让 php 检查时间戳,如果一个小时过去了,则删除该条目。

如果 cron 作业仍然不能满足您的目的,请查看此

http://php.net/manual/en/function.set-time-limit.php

于 2013-07-05T23:03:18.557 回答
1

你可以使用一个

at 

工作

因此,当您最初加载整体以在 24 小时后触发时,您可以做的是设置 at 作业。

xxx:~ $ echo 'ps -ef |grep atd' > x

xxx:~ $ at -f x now + 1 day
job 4 at Sun Jul  7 09:08:00 2013

xxx:~ $ at -l 4
4   Sun Jul  7 09:08:00 2013

xxx:~ $ at -c 4
#!/bin/sh
# atrun uid=501 gid=20
# mail xxxx 0
umask 22
GRAILS_HOME=/usr/share/grails; export GRAILS_HOME
<more environment>
_=/usr/bin/at; export _
cd /Users/xxx || {
 echo 'Execution directory inaccessible' >&2
 exit 1
}
OLDPWD=/Users/xxx;        export OLDPWD
ps -ef |grep atd
于 2013-07-05T23:14:45.883 回答
1

我已经考虑过了,嗯,这些条目是按时间顺序排列的:

  • 如果条目 25 必须在上午 00:01 删除,则条目 26 将在同一时间或上午 00:01 之后删除。

  • 我不想为每个条目创建一个 cron 作业,因为我知道会有很多条目。

  • 我的想法假设脚本将至少检查一次以获取条目的时间戳和它的 id。

我知道这可能不是最优化的方式,但我想分享这个观点。

想法:

Get the ID and TIMESTAMP of entry e
(TIMESTAMP+24) - TIMESTAMP -> Set a cron job to erase the file and remove the entry
and start this script for entry e+1 (identified by id + 1)

因此,每个条目将有一个 cron 作业,但我们只能有一个 cron 作业。

于 2013-07-06T09:55:09.550 回答