mysql 定期清理表数据_定时删除Mysql表过期数据的小工具

背景

最近接到一个需求,业务数据表中有三张表,只想保留最近365天的数据,过期的就删除,避免这些没有太大意义的数据造成数据表越来越大。

当时想了两种解决方案:

方案一

利用mysql的event事件机制,通过写sql脚本,可以很快的完成这个需求,优点很明显:

快速实现,时间成本低

不需要再引入什么乱七八糟的东西或者代码

但是,也有很明显的缺点:

没有日志啊,怎么知道有没有跑,成没成功呢

只能定时跑,不能人工触发,也没法做管理

方案二

当时出现在脑海里的第二个思路就是直接利用现有代码里面的ScheduledTask,写点java代码就把这个需求给搞了,这样的话日志也有了,加个controller连手动触发也有了,再积极点,搞个异常告警什么的也不是事。

然而,这样真的好吗?这次是要清三个表,就写三个定时任务,三段sql,下次再加个表,再加代码上线?好累啊,有没有更好点的方式呢?

方案三

所以就干脆自己写个工具算了,期望是以后有类似的需求就别再开发了。

总的来说,设计思路是这样的:

使用SpringBoot快速开发一个Web应用

启动的时候读配置文件,使用quartz加载定时任务

配置文件里面配置了清理的时间(cron表达式)、数据库url、用户名、密码、要清理的库名、表名、清理依赖的字段、保存时间

定时任务执行的时候,根据配置文件的配置,创建链接,拼装清理的sql语句,然后执行,执行完关闭链接

通过上面的设计,一是能够满足这次的需求,二是以后有类似的数据清理需求的时候,可以不用再做代码开发了,改改配置就好了,三是以后可以方便的做拓展,比如,加入zookeeper,就可以做分布式任务协调,加个页面,就可以页面操作和管理所有的清理任务,想简单点的话,有类似需求的项目可以自己一行命令运行这个工具类,想得复杂一点,可以加入不同的清理对象,使得不仅仅支持Mysql,然后可以搭建一个平台类项目,不同项目的数据清理需求都可以在这里维护管理….

当然,我想多了,其实就是完成这么一个简单的需求而已。

那么有没有其他方案呢?我想也有的,引入个分布式调度框架,然后写个清理脚本,用人家成熟的产品来做这个活儿嘛,但是想想好像更重了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值