关于过期数据的自动清理

一、目的及意义

        不管什么样的系统,网站,只要是一直在运行,随着时间的积累,肯定会产生大量甚至海量数据,而且通常情况下,这些数据对我们系统现在以及将来的运行,或监控、跟踪都起不了作用,反而会因为数据量过大导致数据库的压力剧增,系统反应过慢,因此我们需要定期的将这些不用的数据清掉。

二、方式与方法

从开发角度来讲,这部分的功能是无需用户直接参与的,用户只需要按照约定配置好参数,让系统自动的调用即可。该模块的功能对于系统的业务来说没有丝毫关系,而且如果数据量过大的话,在执行该模块时会导致系统运行的速度过慢,因此最好的办法是将该模块配置在一个最少用户访问量的时间段,比如凌晨两点左右。

        系统产生的数据,包括两种,一种是数据库表数据;一种是文件。

        该模块执行的方法有两种:一种是按照时间,用户设置好一个时间参数,比如30天(当然这里也可以设置具体的日期,灵活转换嘛),则系统自动将从当日起30天之前的数据清掉;一种是按照量数,用户设置好一个量数,比如10000条,则系统自动将多余的数据清掉,在这里,为了能够保留最新的数据,清理之前最后是要进行排序之类的操作,确保删除的都是最旧的数据。可以只提供一种方案去执行,也可以同时执行两个方案,这就要看具体的要求了。如果同时使用两种方案的话,就要决定哪个方案先,哪个方案后,这个又得留给用户自己去选择,而往往用户就不关心这个事,所以怎么取舍还得具体情况具体讨论了。

三、具体对象

针对删除数据表来说,个人建议是先根据用户设置的时间(即多少天)以当前时间回滚到指定的日期,然后拿着这个日期到数据库进行比对,这样就比在sql或hql语句中先将两个时间相减再判断是否符合要求来快的多,以下的删除文件类似。

针对删除文件来说,文件有创建时间与最后修改时间 ,个人认为可以使用最后修改时间作为标准,因为一个文件创建后,会不停的往文件写数据,文件的最后一条写入的时间就是最后修改的时间,这比较符合要求。为了确保留下来的都是最新的文件,在按照量数删除之前需要先对文件进行排序。

四、执行

前面提到过的,该模块最好是能配置成自动执行的,在这里我推荐使用Spring quartz定时器,Quartz是一个强大的企业级任务调度框架,Spring中继承并简化了Quartz,我们只需要简单的几句配置就可以了。这里值得一提的是cron表达式,这是指定什么时间去执行任务的配置,你可以配置每天的02:00执行。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章