任务轮询:
最近一个项目需要调BI平台每日明细数据进行处理,在掉用接口时遇到的问题:
1:什么时候掉用?
2:怎么确认调用接口拿到的数据是有用的(第一版还是重跑的?完整的还是不完整的?)?
3:每次调用要获取前一天的数据,怎么保证历史数据的完整?
最终方案:任务轮询
根据BI每天执行任务的时间来安排调用时间;
数据完整问题:
1:调用BI任务清单接口,获取任务清单并存储;
2:轮询任务清单表:
a:当前任务BI状态是否为未完成?若未完成,调用BI任务清单更新?
b:当前任务BI状态是完成的,本系统运行过了吗?若已运行,不管。判断下一任务。
c:当前任务BI状态是完成的,本系统未运行,根据任务信息调用BI数据接口获取数据,获取完毕后更新任务状态。判断下一任务。
重跑还是新增数据?
BI那边只有一版数据,每次重跑是做的update,本系统还需要获取历史数据,最初计划用任务清单的状态来判断,考虑的BI历史数据有些无任务清单,最终采用判断本系统数据库的方法来判断数据重跑。
乐观锁:
更新数据状态时只做了基础的查询并对修改前状态的判断,测试时发现当多人同时点击,通过操作记录可以看到,状态在同一时间被修改了,之后引入乐观锁解决这一问题。
在表中新增字段 version,默认version=0为最初版本,后面每次做修改都要带着version去做条件修改,数据每次修改,version做自增。