如何精确到期(或更新)MySQL记录到期时间?

时间:2016-02-15 11:11:23

标签: mysql mysql-event

去年我正在研究一个大学项目,其中一个特征需要数据库中的记录到期,几乎达到第二精度(即创建后恰好x分钟/小时)。我说'差不多',因为几秒钟可能不会意味着我的世界末日,虽然我可以想象在像拍卖网站这样的东西,这可能是重要的(我敢肯定这些类型的网站使用不同的措施,但仅作为一个例子)。

我对MySQL事件进行了研究,并最终使用它们,虽然现在我回想起它,我想知道是否有更好的方法来做我做的事情(这不是那么精确或有效) 。我可以想到使用事件来实现这三种方法 - 我想知道这些方法是否有效和有效,或者是否有更好的方法:

  1. 安排事件每秒运行一次并更新过期记录。一世 想象一下,这会导致记录数量的问题 增加并执行的时间超过一秒,甚至可能 干扰正常的数据库操作。如果我错了,请纠正我。

  2. 安排一个每半小时左右运行的事件(可以是任何事件 时间间隔,真的),更新过期的记录。同时,强加 查询数据库时只选择返回记录的选择标准 其到期日期尚未过去,以便任何记录表明 自上次事件执行未被检索以来已过期。虽然这个 在检索时会很准确,它会破坏目的 把事件放在第一位,我会假设额外的 选择标准会降低选择查询的速度。在我的项目中 去年,我使用了这种方法,并且事件更新了记录 实际上只是用于后端记录目的。

  3. 在插入时,有一个触发器,用于创建特定于的动态事件 记录将在到期时准确到期。 到期后,删除该事件。我觉得这会是一个 这样做的好方法,但我不太确定是否有这么多 一次运行的事件会影响到的性能 数据库(想象一个每小时甚至有60个插入的数据库 - 这60个事件同时运行了一个小时。过度 时间,取决于到期时间,这会加起来。

  4. 我确信你有更多的方法可以做到这一点 - 也许使用一个在RDBMS外部运行的独立脚本 - 但这些是我正在考虑的。如果有人对如何精确地过期记录有任何见解,请告诉我。

    另外,尽管事实上我过去确实使用过它,但我并不喜欢方法2,因为虽然这适用于记录的到期,但如果不是在确切的时间,我想在某个时间(即博客网站上的预定帖子)激活它。因此,如果您有一个方法可以在一个精确的时间更新记录,无论该更新做什么(过期或发布),我都会很高兴听到它。

1 个答案:

答案 0 :(得分:0)

选项3:

  

在插入时,有一个触发器,用于创建特定于记录的动态事件,该事件将在到期时准确到期。到期后,删除该事件。我觉得这样做是一个很好的方法,但我不太确定如果同时运行这么多事件会影响数据库的性能(想象一下每小时甚至有60个插入的数据库 - 那就是60事件全部同时运行一小时。随着时间的推移,根据到期时间长短,这会加起来。

如果您知道插入的到期时间,请将其放入表格中。

  • library_record - id,...,create_at,expire_at

使用以下条件查询实时记录:

expire_at > NOW()

与发布相同:

  • library_record - id,...,create_at,publish_at,expire_at

其中:

publish_at <= NOW() AND expire_at > NOW()

您可以将publish_at = create_at设置为立即发布,或者如果您不需要,只需删除create_at

每个具有正确索引的内容都将具有与表中is_live = 1标志相当的性能,并为您节省大量与事件相关的问题。

此外,您将能够确切地了解为什么记录不存在以及何时过期/应该轻松发布。您还可以查询诸如即将过期的记录等内容,并轻松发送提醒。