城投集团下主营业务九家驾校,每个驾校都是独立的系统,系统开发语言多样化有java与.net数据库使用有mysql与sqlserver,驾校系统数据不互通,数据可视性差,需要数据给到集团领导做重大决策,故而开发BI数据报表系统。
系统使用阿里云DTS服务同步mysql 与sqlserver数据写入阿里云数仓AnalyticDB MySql中并创建九个库对应九家驾校数据,查询分类有招生数据、教务教学数据、库存数据。
该项目大量使用CompletableFuture多线程查询提高响应速度,因查询场景复杂创建两个线程池做线程隔离防止死锁,最终将所有查询接口RT控制在1s以内(有复杂多表关联查询sql)。
设计之初就有想过避免大量if else,有考虑过策略模式,一个驾校一个具体实现类,但由于该项目还有一小部分是由另一个同事开发,避免造成沟通冲突吧,还是采用这种功能分离的方式,建立枚举,反射去调用,mapper里面方法名字定了规范,按规范调用代码赏心悦目,少写许多无用代码。
项目大概总周期长达半年,从v1.0到v1.5算是把管理层需要的查询方式全部做完了,中间穿插了两员名片一类小需求迭代,BI包含APP端查询,后台查询,我的职责就是将其他人给到我的sql查询出的结果做拼装,怎样让查询效率更高(好让集团领导夸奖我们部门CTO),也是该项目让我对CompletableFuture更加熟悉,以及对线程池的配置怎么样配置最优。