我设计了一种从 MySQL 表中删除旧数据的机制。
表中的每一行都包括当前日期测量,我正在删除相对于当前日期较旧的记录块。
我们的产品计划部署并成为更大系统的一部分。在生产中假设计算机的时钟与其自身一致(我使用 current_date() 作为检索当前日期的函数)是否合理?
由于夏季/冬季时间的变化,我确实支持时钟的微小变化,但是,较大的变化(超过一周)可能会导致删除不同的数据而不是最旧的数据(如果时钟将被删除,即使是当前数据也可能被删除)向后移动到最低日期以下)
我设计了一种从 MySQL 表中删除旧数据的机制。
表中的每一行都包括当前日期测量,我正在删除相对于当前日期较旧的记录块。
我们的产品计划部署并成为更大系统的一部分。在生产中假设计算机的时钟与其自身一致(我使用 current_date() 作为检索当前日期的函数)是否合理?
由于夏季/冬季时间的变化,我确实支持时钟的微小变化,但是,较大的变化(超过一周)可能会导致删除不同的数据而不是最旧的数据(如果时钟将被删除,即使是当前数据也可能被删除)向后移动到最低日期以下)
假设您有标准的保护措施,例如与时间服务器同步,时钟应该有点可靠,并锁定以防止意外更改。
但是,为了减轻任何潜在的损害,请考虑添加另一个表来记录删除记录的每个日期。
如果您的进程每周运行一次,那么它将检查此表以确保当前日期在它上次运行的一周内。这可确保您不会跳过任何几周,将潜在的“意外”损失限制在一周内。根据需要调整窗口。
如果检查失败,需要用户干预才能让事情回到正轨。
我认为这是一个坏主意,您不应该依赖用户的系统时间,例如,如果他们更改它会怎样。
一个更好的主意是将 MySQL 服务器的时间作为“中央数据源”,如始终基于now()
MySQL 服务器上的当前时间 () 存储,然后也基于该时间进行修剪。
这意味着即使服务器的时间设置错误,所有查询都会偏移一个偏移量,代表相同的时间段,而不是不匹配。