首页 > 社交 > 科普中国

从20s优化到500ms,我用了这三招

常驻编辑 科普中国 2022-07-02 节点   线程   批量   接口   性能   评价   组织   业务   数据   系统
换句话说,调用批量评价查询接口,一次性最多可以查询100条记录。Dxl拜客生活常识网

但实际情况是:结算单列表页面还包含了很多订单。基本上每一个结算单,都有多个订单。调用批量评价查询接口时,需要把结算单和订单的数据合并到一起。Dxl拜客生活常识网

这样导致的结果是:调用批量评价查询接口时,一次性传入的参数非常多,入参list中包含几百、甚至几千条数据都有可能。Dxl拜客生活常识网

2. 现状

如果一次性传入几百或者几千个id,批量查询数据还好,可以走主键索引,查询效率也不至于太差。Dxl拜客生活常识网

但那个批量评分查询接口,逻辑不简单。Dxl拜客生活常识网

伪代码如下:Dxl拜客生活常识网

public List query(List list) {
    //结果
    List result = Lists.newArrayList();
    //获取组织id
    List orgIds = list.stream().map(SearchEntity::getOrgId).collect(Collectors.toList());
    //通过regin调用远程接口获取组织信息
    List orgList = feginClient.getOrgByIds(orgIds);
    
    for(SearchEntity entity : list) {
        //通过组织id找组织code
        String orgCode = findOrgCode(orgList, entity.getOrgId());
    
        //通过组合条件查询评价
        ScoreSearchEntity scoreSearchEntity = new ScoreSearchEntity();
        scoreSearchEntity.setOrgCode(orgCode);
        scoreSearchEntity.setCategoryId(entity.getCategoryId());
        scoreSearchEntity.setBusinessId(entity.getBusinessId());
        scoreSearchEntity.setBusinessType(entity.getBusinessType());
        List resultList = scoreMapper.queryScore(scoreSearchEntity);
        
        if(CollectionUtils.isNotEmpty(resultList)) {
            ScoreEntity scoreEntity = resultList.get(0);
            result.add(scoreEntity);
        }
    }
    return result;
}

其实在真实场景中,代码比这个复杂很多,这里为了给大家演示,简化了一下。Dxl拜客生活常识网

最关键的地方有两点:Dxl拜客生活常识网

  • 在接口中远程调用了另外一个接口
  • 需要在for循环中查询数据

其中的第1点,就是:在接口中远程调用了另外一个接口,这个代码是必须的。Dxl拜客生活常识网

因为如果在评价表 中冗余一个组织code字段,万一哪天组织表中的组织code有修改,不得不通过某种机制,通知我们同步修改评价表的组织code,不然就会出现数据不一致的问题。Dxl拜客生活常识网

很显然,如果要这样调整的话,业务流程上要改了,代码改动有点大。

相关阅读:

  • ssr链接怎么用(安卓手机ssr怎么添加节点)
  • ssr怎么设置(ssr加速器节点)
  • 节点是什么意思(手机怎么换节点)
  • 「数据结构之字典树Trie」C语言版本实现
  • 网宿科技股份有限公司2021年年度报告摘要300017
  • 《重生之门》热播背后:悬疑剧集寻求差异化,阿里影业自制
  • 互联网后端技术大全!建议收藏
  • A股下半年行情走势的沙盘推演!第一阶段结束时间会是7月
  • 成为国家新基建核心,边缘计算的魅力到底在哪里
  • 牛客网高频算法题系列合并两个排序的链表
    • 网站地图 |
    • 声明:登载此文出于传递更多信息之目的,并不意味着赞同其观点或证实其描述。文章内容仅供参考,不做权威认证,如若验证其真实性,请咨询相关权威专业人士。