——Apache Roller源碼分析
系統中,某些DB數據需要頻繁更新,但實時性不強,可以采用延時更新的方式。設定一個間隔時間,累計更新數據,再通過特定的work
thread統一更新。Apache Roller這個開源的Java Blog 正是才用了這種方式,實現站點計數的延時更新。
優點:減少了數據庫的一部分壓力。尤其是在高并發下,數據庫I/O及并發處理的壓力
缺點:實效性差,用戶在某個時間點內獲取的數據不準確。
附圖為 實現數據延時更新的Class Diagram

說明:
HitCountQueue.java 為站點計數隊列,singleton instance,通過processHit
方法添加站點計數,通過resetHits方法清空Queue,為防止同步問題,增加了synchronized。在其構造函數內,會啟動一個
workThread實例,完成隊列數據到數據庫的持久化工作。
Job interface 為任務接口
HitCountProcessingJob.java 實現了Job接口,完成數據更新的任務。
WorkerThread.java
執行Job的工作線程,ContinuousWorkerThread繼承自WorkerThread,增加了時間間隔的功能。線程執行后,會sleep
指定的時間。