性能优化、SQL优化

资金项目性能优化

家住魔仙堡 提交于 2019-11-29 08:10:47
一、项目背景 该项目是一个对资金还、回款改造的项目。以前的做法是,在签约或者发生标转让的时候生成回款信息,直接插入回款表,下次回款时从回款表里面查找。现在这张表有2亿+条数据,100G的数据量,并且还在快速增长,随时都有可能爆发出问题。改造的逻辑是,按照投资人投资的金额占比来实时计算回款。 二、性能优化 1、缓存优化 针对我们这种应用场景,大部分情况是投资人查看自己投了某一个标的回款情况。这里,可以根据标和投资人做一个回款记录的缓存,在service层就可以把用户请求给做掉。为了保证数据一致性,在实际发生回款的时候,刷新这条缓存数据。 2、多线程优化 线上的服务器一般都多核的,完全可以开多个线程同事跑,充分利用计算资源。在这个项目中,对历史数据做订正的时候,同时开了20个线程并发修复历史数据。这里要注意一点,涉及到资金的数据一致性要求很高,一般会用到事务,这里多线程要防止发生死锁。 3、对常用的字段建索引 本次项目中涉及到几个表关联查询,几张表有1000w-2000w条数据,对关联的字段建立索引之后,单次查询时间由原来的1.5s降到了200ms左右。查询效率提高了好几倍。 4、Ibatis表达式优化 单个查询中,一个SQL上千个字符,如果直接把sql裸露在<select> </select>关键词中间,其实ibatis要做很多检查的工作,如果这些sql是纯查询语句