——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
指定的时间。