实时 sql 优化经验
1、用代码代替 sql 内部计算和 关联查询
就是将分析出来耗时的 sql 进行重写、拆分成多次查询后数据重组、去掉 sql 函数等
等;sql 能干的事情,程序肯定能干,且程序运行的性能一般情况会快很多,而且 web 服务
器可以部署很多台;优点:可实现快速优化,且性能非常可观;缺点:可能会增加程序的
复杂度;
2、业务冗余字段
就是在更新某张数据库业务表时,将其关联表的某些字段冗余进来,以减少某些业务
的表关联查询从而达到提升速度效果;优点:实现简单;缺点:此方案只适用于某些比较
简单的场景,如果关联的表非常多,且业务需要查询的字段也非常多,此时程序将对其它
业务表的业务产生非常严重的侵入【即在更新别的表时候,需要更新该表】,在后期优化
过程中,该方案还涉及到初始化数据的问题,另外数据一致性问题堪忧【如多业务保存中
途宕机】,所以复杂业务不建议使用该方案。
3、离线计算
就是利用定时任务或者 hadoop 等到一些离线计算的技术,将数据跑成报表的方式。此
方案适用于可支持非实时数据的查看的业务【如报表等等】。优点,可单独部署,不影响
主程序,且性能优化效果非常可靠;缺点:数据非实时,且可能出现报表数据和真是数据
某些字段不一致的情况,程序复杂度倍增且需要额外服务器支撑。
基于上诉的分析,博主最推荐的还是方案 1 和方案 3 这两种处理方案。在优化方案选择的
优先级别上:
实时 sql 优化 > 离线计算 > 数据冗余;
注意:在某些特定场景下【如业务非常简单时】,离线计算的优先级别小于数据冗余。