数据库定期清理

Posted

技术标签:

【中文标题】数据库定期清理【英文标题】:Database periodic cleansing 【发布时间】:2011-10-01 09:48:33 【问题描述】:

我正在创建一个公共消息服务,我想知道,为了清除最旧的消息,是否可以在每次提交新消息时删除最旧的消息?还是由于某种原因这种方法效率低下?如果有,您能具体说明原因吗?

我考虑为此创建一个Cron Job,但我不确定它是否适用于这种情况。

【问题讨论】:

【参考方案1】:

您可以在 mysql 中安排活动:

DELIMITER $$

CREATE EVENT cleanup_messages ON SCHEDULE EVERY day ENABLE 
DO BEGIN
  DELETE FROM messages WHERE ......;
END $$

DELIMITER ;

http://dev.mysql.com/doc/refman/5.1/en/create-event.html

【讨论】:

【参考方案2】:

我建议 Cron Job,我相信每条消息都有时间戳,因此您可以在 cron 运行时借助时间戳删除旧帖子。

【讨论】:

【参考方案3】:

这听起来不太可能是合适的。删除旧消息的适当性不太可能取决于新消息 - 例如,如果您打算将消息保留至少一个月,那么如果您突然收到短时间内收到大量消息。

我建议您制定您的“垃圾”标准,然后安排定期作业批量删除旧邮件(例如每天一次)。

【讨论】:

Not entirely unlike... 双重否定总是让我头晕目眩... 但是 +1 表示关注点分离... @Jordão:抱歉,是的,我的意思是这听起来不太合适。已编辑。 谢谢,现在它变得完美有意义了。

以上是关于数据库定期清理的主要内容,如果未能解决你的问题,请参考以下文章

数据库定期清理

安全的 XSS 清理功能(定期更新)

ORACLE定期清理INACTIVE会话

ORACLE定期清理INACTIVE会话

CDH 集群定期清理指南

SQL2005自动备份,定期删除的维护计划及自动定期清除日志