定時刪除Mysql表過期數據的小工具

背景

最近接到一個需求,業務數據表中有三張表,只想保留最近365天的數據,過期的就刪除,避免這些沒有太大意義的數據造成數據表越來越大。

當時想了兩種解決方案:

方案一

利用mysqlevent事件機制,通過寫sql腳本,可以很快的完成這個需求,優點很明顯:

  1. 快速實現,時間成本低
  2. 不需要再引入什麼亂七八糟的東西或者代碼

但是,也有很明顯的缺點:

  1. 沒有日誌啊,怎麼知道有沒有跑,成沒成功呢
  2. 只能定時跑,不能人工觸發,也沒法做管理

方案二

當時出現在腦海裏的第二個思路就是直接利用現有代碼裏面的ScheduledTask,寫點java代碼就把這個需求給搞了,這樣的話日誌也有了,加個controller連手動觸發也有了,再積極點,搞個異常告警什麼的也不是事。

然而,這樣真的好嗎?這次是要清三個表,就寫三個定時任務,三段sql,下次再加個表,再加代碼上線?好累啊,有沒有更好點的方式呢?

方案三

所以就乾脆自己寫個工具算了,期望是以後有類似的需求就別再開發了。
總的來說,設計思路是這樣的:

  1. 使用SpringBoot快速開發一個Web應用
  2. 啓動的時候讀配置文件,使用quartz加載定時任務
  3. 配置文件裏面配置了清理的時間(cron表達式)、數據庫url用戶名密碼要清理的庫名表名清理依賴的字段保存時間
  4. 定時任務執行的時候,根據配置文件的配置,創建鏈接,拼裝清理的sql語句,然後執行,執行完關閉鏈接

通過上面的設計,一是能夠滿足這次的需求,二是以後有類似的數據清理需求的時候,可以不用再做代碼開發了,改改配置就好了,三是以後可以方便的做拓展,比如,加入zookeeper,就可以做分佈式任務協調,加個頁面,就可以頁面操作和管理所有的清理任務,想簡單點的話,有類似需求的項目可以自己一行命令運行這個工具類,想得複雜一點,可以加入不同的清理對象,使得不僅僅支持Mysql,然後可以搭建一個平臺類項目,不同項目的數據清理需求都可以在這裏維護管理…

當然,我想多了,其實就是完成這麼一個簡單的需求而已。

那麼有沒有其他方案呢?我想也有的,引入個分佈式調度框架,然後寫個清理腳本,用人家成熟的產品來做這個活兒嘛,但是想想好像更重了。

附上github地址:https://github.com/DevotedTangLiu/data-clean-util

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