最近踩了个坑。。并且不断地踩。。
今天就遇到一个好烦的事。
团队有个伙伴。。总把一些自己觉得麻烦的事推给其它人,造成别人更加麻烦。。
过程
AVS业务,需要用到三个信息,分别为车辆销售,车辆过点信息,车辆保修信息。
1:这哥门设计了一个表,包含了这三个信息(也就只有这三信息),然后就用这个表作为基础业务,开展业务。也不管数据来源了。。
2:测试人员测到这个业务时,问到数据来源,这哥们说数据来自于接口,并要求车辆销售,车辆过点信息,车辆保修信息信接口同步的时候
,同时插入AVS数据
。
3:当时我就觉得不合理,你自己关联一下三个表不就行了吗,为什么要这样做?
他:数据量大,性能差。
我:数据量大,加索引,条件应该还是可以的。即便要做静态化,那也不能是在接口里做呀。。
他:用的地方多,改动太大。。
。。。
最后。。哎,不管你怎么实现,数据乖乖地来碗里。
但这已经不是第一次了,如果可以重来,我要选李白。。咔嚓,多说无益,还是想想怎么解决问题吧,再一次由我肩负起解决问题的重任。。
方案一:
1:修改AVS表,使用关联的方式,关联三个业务数据。
2:修改关联的页面。
3:修改关系的报表。
方案二:
1:采用这哥门的方案,在接口同步的时候。
2:每个接口数据进来时,如果存在AVS则更新对应字段,不存在则插入AS记录。
方案三
1:使用定时任务(或者是数据库)把数据同步。
方案选择:
方案一 改动大,并且在测试尾期,风险也大,放弃使用。
方案二,这个方案问题太多
1:单一原则,接口应该就做接口对接的事。
2:三个接口去做改动,就为了这个?本未倒置了。。还是依赖反转。
那么也只有方案三。。
处理逻辑:
1:开启一个定时任务 ,一小时同步一次。执行一次同步脚本。
2:脚本逻辑: 四个表 A(AVS)、B(Sale)、C(Point) 、D(Guaranteed ) 。
insert A from (select * from B inner join C inner join D where not in A and 7天之内 )
PS:查出时间范围内 BCD同时存在,并且A不存在的数据,插入到A里面。
完美快速解决。。
写在最后额,东西是我做的,我又要对此负责了。。。感觉是个圈套,我还是跳了,好烦。。
来源:oschina
链接:https://my.oschina.net/u/4368375/blog/4368719