php 24小时后自动从数据库中删除行[已关闭]

q43xntqr  于 2022-12-17  发布在  PHP
关注(0)|答案(3)|浏览(113)

已关闭。此问题需要超过focused。当前不接受答案。
**想要改进此问题吗?**更新此问题,使其仅关注editing this post的一个问题。

六年前关闭了。
Improve this question
我想在php/mysql中创建一个类似Snapchat的东西,它会在24小时后自动删除行。我读过关于cron jobs的文章,但它会减慢应用程序的速度,所以我想知道是否有其他方法可以做到这一点?

e5njpo68

e5njpo681#

你现在看到的实际上是这样的:

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

只要你填充created_at并索引它,这个过程应该会很快运行,如果你有很多记录,我的意思是超过1亿条,你需要把它们隔开:

DELETE FROM snaps ... LIMIT 10000

在那里你可以做10K的块或任何工作最好。
Postgres使用的符号略有不同:

DELETE FROM table WHERE created_at <= NOW() - INTERVAL '1' DAY;
fcipmucu

fcipmucu2#

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

  1. Cron作业(应用程序外部)
    1.应用内(服务器端)作业(php中的new EvTimer(),node/js中的setInterval(),Java中的javax.swing.Timer等)
    1.线程+睡眠(请不要这样做)
    1.报警信号(您可能不应该)
    但是,而不是删除间隔和依赖它,我建议下面,它也会给予你准确的24小时的正确性(你可能不需要它,但它是好的无论如何):
  • 您的记录需要加上时间戳(几乎每个解决方案都需要这样做)
  • 读取记录时,筛选出时间戳小于现在减去24小时的记录
  • 使用cron job oe in-app job,在一定的时间间隔内删除旧记录(清除),比如一天一次。
elcex8rz

elcex8rz3#

虽然为数据库的每一行添加一个cron作业肯定不是一个好主意,但我不认为每小时(或每30分钟,或每天一次)运行一个cron作业有什么问题,它会删除超过24小时的所有条目。
您还可以确保在查询条目时不会返回超过24小时的条目。

相关问题