清理數據策略

1.爲什麼要清理數據?
硬盤的空間不會無限大,數據庫的數據也不可能一直增長,爲了保證系統的運行,需要讓數據量保持在一個區間內可控。

2.清理什麼樣的數據?
清理數據的策略主要有兩個方面:一個是數據庫的數據,一個是硬盤數據(緩存數據也算)

3.如何清理?
清理數據的方法有很多,如果系統已經上線了,那麼數據清理是作爲該系統的一部分的。
最開始上線的時候,我們採用定期清理,只讓系統保存最近一個月(或者一週)的數據,這時把數據清理單獨作爲一個模塊,加入服務器的任務管理器,定期執行。
可是,隨着系統不斷擴大,數據越來越多,現在一天的數據量是原先的幾十倍甚至上百倍,這個時候定期清理有兩個弊端:
一是清理時間長,尤其是數據庫的數據,執行sql的時間長,極易造成數據庫事務未提交,佔用數據庫lock

Error querying database. Cause: java.sql.SQLException: Lock wait timeout exceeded; try restarting

二是刪除的數據量大,容易超出數據庫的限制max_binlog_cache_size

Multi-statement transaction required more than 'max_binlog_cache_size' bytes of storage

上面兩個問題是可以通過數據庫操作和修改配置解決的,但是我們不能保證以後的數據庫量會不會更大,所以不能再用定期清理的策略,改用持續小批量清理,對緩存的利用,比如redis,通常用完即刪除臨時數據,參考這個思路,持續清理數據有兩種方法:
一:跟redis的利用一樣,在新增數據的模塊也刪除一些數據,加一條刪一條,這樣的思路代碼實現起來最方便,改動最小,但是又增又刪,反覆操作數據庫,也會增加性能上的開銷。
二:數據的清理還是使用單獨模塊,縮短定時時間,這樣每次刪除的數據都不會很大,或者把數據切分,先不要一起刪除,而是切分出來(例如100條記錄一組)刪除,保證數據量不會超出數據庫相應配置的限制。

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