最近在负责项目的数据报表部分的工作。上一个月数据量增长的很快,也发现了自己报表代码中的几个由数据量过大引起的问题。现简单总结一下。
去重
在实际业务当中经常会遇到一个模块通过rpc向另一个模块查询信息的情况。比如:
- 根据商品id查询商品信息
- 根据门店id查询门店信息
这里有两点要注意:
- 要批量查询信息,不要在foreach中进行信息查询
- 在查询前要对id数组进行去重操作
分页
因为报表是对一段时间的数据进行处理,数据量可能会比较大,所以一开始就要在关键位置进行分页操作。
不对空数组进行foreach
在PHP中对空数组进行foreach操作会报warning。
所以在对数组进行foreach执行要进行empty判断。
不要再foreach中进行rpc调用,数据库操作
在接口调用的过程中,网络耗时要远大于内存中执行的操作的耗时。
所以在模块与模块之间,模块与数据库之间,需要查询信息时,要通过批量的方式进行数据查询。
- 模块与模块之间可以通过传数组参数进行数据查询
- 在查库的时候,可以通过in操作进行数据查询
注:千万不要在foreach中进行rpc调用,数据库操作,否则就是在给自己挖坑。
计算同类数据,使用相同的算法
实现同样的功能,尽量去复用已经实现了这个功能的代码。
如果实在不方便复用这部分代码,那也要保证使用相同的算法实现这部分逻辑。否则,就是在给自己挖坑。