功能是评价列表,抓包结果如上图。每一行元素又嵌套“商品信息”和图片数组。看下xx写的主要逻辑。
最外层从mysql查询到基本数据的列表,然后在for循环里面再从db里面查询图片列表和商品信息。这个性能绝对不好。查了下rpc接口的时间:
如果只在db层,该如何优化呢。
1 今天一个同事提醒了下,查询嵌套的数据时,可以取外面的outIds,然后查询里面的嵌套的数据时,使用in(:outIds).这样就减少了连接数据库的次数。然后获取的数据再根据ID来匹配。单前提是数据库没有分表的话,
2 在数据库的底层看就是表之间的嵌套,只能数据冗余来实现。上面的例子,图片评价列表保存时,可以转换为一个json对象,当做一个字段保存在最外层的表中。商品信息类似的。这些冗余的json对象的字段一般情况仅仅是按业务需要的几个字段,一般都是个位数的一般都比原来对象对应的表的字段少很多。
至于插入的时机,job定时跑还是调用保存接口时看业务需求。及时性不高的话,job来执行。