最近两周做了一个库存系统的优化,其实工作量并不是很大,大概就用了几天的时间,但是对系统的影响是特别大的。
写这篇文章,主要是为了说明灵感的重要性,对于做性能优化这件事,就是一件再普通不过的事,并没有什么可说的。
故事还得从一年半以前说起(2016年5月库存系统正式上线运行),库存更新功能最初就是使用Entity Framework框架做的,功能有点复杂,那么开发人员就循规蹈矩用一惯的方式去开发,保存数据就是一条数据一条SQL这种方式,比如说,一次性保存或更新一年(算365天)的数据,那么,保存的数据最多是 365*3 (库存表、日志表、房态自动清零表),一条一条提交到数据库,那得提交1095次,这个时候虽然速度慢点,倒还不算太慢,也是因为数据库总数据量还没多大,后面又加了业务,保存时数据最多是 365*5 (库存表、日志表、房态自动清零表、数据防重表、囤单表),这个时候光执行SQL就得是1825次,还包括一些数据查询操作,逻辑判断操作,还有Mysql数据库表数据量非常大的情况下,这种速度真的慢到事务100%超时,数据保存不成功,现在只能把每次操作时间设置短点,一般是一个月到三个月(30天~90天)这个数据才能勉强保存成功,但等待时间也挺长的。查了下现在(归档移走了部分数据之后),库存表数据近3千万(select count(*) 需要47s),日志表查不出来,查了几分钟还在loading,我怕内存爆掉就停掉了,反正是库存表的N倍,之前有统计是大于1亿的数量。