24小时后自动从数据库中删除行

时间:2016-11-19 21:04:16

标签: php mysql

我想创建类似Snapchat的东西,它会在php / mysql中24小时后自动删除行。   我已经阅读过有关cron作业的内容,但它会降低应用程序的速度,所以我想知道是否有其他方法可以做到这一点?

3 个答案:

答案 0 :(得分:3)

你正在看的是有效的东西:

DELETE FROM snaps WHERE created_at<=DATE_SUB(NOW(), INTERVAL 1 DAY)

只要您填充created_at并将其编入索引,就可以相当快地运行。如果你有很多记录,而且我的意思是超过1亿,那么你需要将其记录下来:

DELETE FROM snaps ... LIMIT 10000

你可以用10K块或其他最好的块来做到这一点。

答案 1 :(得分:0)

虽然为数据库的每一行添加一个cron作业肯定是一个坏主意,但我没有看到每小时(或每30分钟,或一次)运行一个cron作业(例如)的问题一天),删除超过24小时的每个条目。

您还可以确保在查询时不会返回超过24小时的条目。

答案 2 :(得分:0)

对于您的问题,有很多方法可以做到:

  1. Cron作业(应用程序外部)
  2. 应用程序内(服务器端)作业(节点/ js中的SetTimeout,Java中的javax.swing.Timer,ETC。)
  3. 线程+睡眠(请不要这样做)
  4. 警报信号(你可能不应该)
  5. 但是我没有删除间隔并依赖它,我建议如下,它也会给你准确的24小时(你可能不需要它,但无论如何都是好的):

    • 您的记录需要加盖时间戳(几乎所有解决方案 将要求这个)
    • 读取记录时,过滤掉时间戳记的记录 比现在减去24小时
    • 使用cron job
    • 删除间隔(例如一天)的记录(清理)