批量读取和延迟修改的原理是通过减少操作的次数来提高效率,如果使用得恰当,效率将会呈数量级提升。
批量读取是将多次查询合并到一次中进行,比如,在一个业务系统中需要批量导入工人信息,在导入前需要检查工人的编码是否已经在数据库中、工人对应的部门信息是否正确(在部门表中是否存在)、工人的工种信息在工种表中是否存在等,如果每保存一条记录都查询一次数据库,那么对每个需要检查的字段,都需要查询与要保存的记录条数相同次数的数据库,这时可以先将所有要保存的数据的相应字段读取到一个变量中,然后使用in语句统一查询一次数据库,这样就可以将n(要保存记录的条数)次查询变为一次查询了。除了这种对同一个请求中的数据批量读取,在高并发的情况下还可以将多个请求的查询合并到一次进行,如将3秒或5秒内的所有请求合并到一起统一查询一次数据库,这样就可以有效减少查询数据库的次数,这种类型可以用异步请求来处理。
延迟修改主要针对高并发而且频繁修改(包括新增)的数据,如一些统计数据。这种情况可以先将需要修改的数据暂时保存到缓存中,然后定时将缓存中的数据保存到数据库中,程序在读取数据时可以同时读取数据库中和缓存中的数据。这里的缓存和前面介绍的缓存有本质的区别,前面的缓存在使用过程中,数据库中的数据一直是最完整的,但这里数据库中的数据会有一段时间不完整。这种方式下如果保存缓存的机器出现了问题将可能会丢失数据,所以如果是重要的数据就需要做一些特殊处理。笔者之前所在的单位有一个系统需要每月月末各厂分别导入自己厂当月的相应数据,每到月末那个系统就处于基本瘫痪的状态了,而且各厂从整理出数据到导入系统只有几天的时间,所以有的厂就专门等晚上人少的时候才进行操作,对于这种情况就可采用延迟修改的策略来解决。