關於過期數據的自動清理

一、目的及意義

        不管什麼樣的系統,網站,只要是一直在運行,隨着時間的積累,肯定會產生大量甚至海量數據,而且通常情況下,這些數據對我們系統現在以及將來的運行,或監控、跟蹤都起不了作用,反而會因爲數據量過大導致數據庫的壓力劇增,系統反應過慢,因此我們需要定期的將這些不用的數據清掉。

二、方式與方法

從開發角度來講,這部分的功能是無需用戶直接參與的,用戶只需要按照約定配置好參數,讓系統自動的調用即可。該模塊的功能對於系統的業務來說沒有絲毫關係,而且如果數據量過大的話,在執行該模塊時會導致系統運行的速度過慢,因此最好的辦法是將該模塊配置在一個最少用戶訪問量的時間段,比如凌晨兩點左右。

        系統產生的數據,包括兩種,一種是數據庫表數據;一種是文件。

        該模塊執行的方法有兩種:一種是按照時間,用戶設置好一個時間參數,比如30天(當然這裏也可以設置具體的日期,靈活轉換嘛),則系統自動將從當日起30天之前的數據清掉;一種是按照量數,用戶設置好一個量數,比如10000條,則系統自動將多餘的數據清掉,在這裏,爲了能夠保留最新的數據,清理之前最後是要進行排序之類的操作,確保刪除的都是最舊的數據。可以只提供一種方案去執行,也可以同時執行兩個方案,這就要看具體的要求了。如果同時使用兩種方案的話,就要決定哪個方案先,哪個方案後,這個又得留給用戶自己去選擇,而往往用戶就不關心這個事,所以怎麼取捨還得具體情況具體討論了。

三、具體對象

針對刪除數據表來說,個人建議是先根據用戶設置的時間(即多少天)以當前時間回滾到指定的日期,然後拿着這個日期到數據庫進行比對,這樣就比在sql或hql語句中先將兩個時間相減再判斷是否符合要求來快的多,以下的刪除文件類似。

針對刪除文件來說,文件有創建時間與最後修改時間 ,個人認爲可以使用最後修改時間作爲標準,因爲一個文件創建後,會不停的往文件寫數據,文件的最後一條寫入的時間就是最後修改的時間,這比較符合要求。爲了確保留下來的都是最新的文件,在按照量數刪除之前需要先對文件進行排序。

四、執行

前面提到過的,該模塊最好是能配置成自動執行的,在這裏我推薦使用Spring quartz定時器,Quartz是一個強大的企業級任務調度框架,Spring中繼承並簡化了Quartz,我們只需要簡單的幾句配置就可以了。這裏值得一提的是cron表達式,這是指定什麼時間去執行任務的配置,你可以配置每天的02:00執行。

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