zoukankan      html  css  js  c++  java
  • List<Object> 查询解析优化

    2018年3月16日

    大型仪器设备分类查出后,需要展示个分类下总共有多少台设备。因为分类总共分三层,加起来数据700+。以后该系统上线设备可能达到2000+,这样统计每个分类下的设备可能会拖垮服务器。

    下面给出项目图片

    今天先把问题抛出来。 现在有两种方法解决:

    1.根据每个分类查询所在分类下的所有设备仪器,这种方法不可行,分类就大概700+,每个都要查库非得崩了。

    2.应该把所有设备都查询出来,然后把设备归到某些分类下。但,怎么把所有设备分到700+分类下呢?

    2018年3月19日,早晨来了大概按着第二种方法写了代码,首先查出所有设备,每个设备一定是对应到第三级节点上面的,把所有设备加到第三级节点中,然后再通过第三级节点加到第二级节点,最后加到根节点。

    第一步骤  首先查出所有的一级、二级、三级节点,分别放入到对应的map中,为了后期查询方便。

         //取出根节点
            categoryRootList = cmsInstrumentDaoImpl.getInstrumentClassRootData();
            categoryRootSeedList = cmsInstrumentDaoImpl.getInstrumentClassRootSeedData();
            categoryRootSeedSeedList = cmsInstrumentDaoImpl.getInstrumentClassRootSeedSeedData();
            HashMap<String, CategoryBean> RootMap = new HashMap<String, CategoryBean>();
            HashMap<String, CategoryBean> RootSeedMap = new HashMap<String, CategoryBean>();
            HashMap<String, CategoryBean> RootSeedSeedMap = new HashMap<String, CategoryBean>();
            //把所有根节点都放入map中
            for(CategoryBean categoryBeanRoot : categoryRootList){
                categoryBeanRoot.setList_i(new ArrayList<CategoryBean>());
                RootMap.put(categoryBeanRoot.getParents(), categoryBeanRoot);
            }
            //把所有二级节点都放入map中
            for(CategoryBean categoryBean_i : categoryRootSeedList){
                categoryBean_i.setList_ii(new ArrayList<CategoryBean>());
                RootSeedMap.put(categoryBean_i.getParents(), categoryBean_i);
            }
            //查出所有的仪器设备,分别查出每个仪器的分类的parents,然后加到每个分类下。
            for(CategoryBean categoryBean_ii : categoryRootSeedSeedList){
                categoryBean_ii.setList_ii(new ArrayList<CategoryBean>());
                RootSeedSeedMap.put(categoryBean_ii.getParents(), categoryBean_ii);
            }

    第二步骤   把查询到的所有设备放入第三级节点

    List<EquipmentInfoBean> eqList = new ArrayList<EquipmentInfoBean>();
            eqList = cmsInstrumentDaoImpl.getInstrumentSuosfl();
            String suosfl_parents = "";
            CategoryBean newcategoryBean = new CategoryBean();
            for(EquipmentInfoBean eq : eqList){
                suosfl_parents = eq.getSuosfl_parents();
                //根据suosfl_parents 查询到的数据不为空则认为该设备属于此分类
                if(RootSeedSeedMap.get(suosfl_parents) != null){
                    newcategoryBean = RootSeedSeedMap.get(suosfl_parents);
                    newcategoryBean.setRecver(newcategoryBean.getRecver()+1);
                    RootSeedSeedMap.put(suosfl_parents, newcategoryBean);
                }
            }

    第三步骤 把三级节点获取的数据放到二级节点,把二级节点的数据放到一级节点

        String parentsRootSeed = "";
            CategoryBean categoryBean_i = new CategoryBean();
            for(Entry<String, CategoryBean> entry : RootSeedSeedMap.entrySet()){
                parentsRootSeed = entry.getValue().getParents().substring(0, categoryBean_ii_length-34);
                //在map中找到对应的一级节点,将二级节点放入一级节点中
                categoryBean_i = RootSeedMap.get(parentsRootSeed);
                categoryBean_i.setRecver(categoryBean_i.getRecver() + entry.getValue().getRecver());  // 计算数字
                categoryBean_i.getList_ii().add(entry.getValue());
            }
            // 拿出所有根节点进行遍历查出  查出每个根节点对应的二级节点  
            //TODO  二级节点的parents = 一级节点的parents + 00 + 二级节点的objectid或者resid   
            String parentsRoot = "";
            CategoryBean categoryBean = new CategoryBean();
            for(Entry<String, CategoryBean> entry : RootSeedMap.entrySet()){
                parentsRoot = entry.getValue().getParents().substring(0, categoryBean_i_length-34);
                //在map中找到对应的一级节点,将二级节点放入一级节点中
                categoryBean = RootMap.get(parentsRoot);
                categoryBean.setRecver(categoryBean.getRecver()+entry.getValue().getRecver()); //同上
                categoryBean.getList_i().add(entry.getValue());
            }

    虽然是能查询出来,大概费事300ms 但是因为设备数量只有两个,我想数据量大时仍有待优化,后期如果有好想法再写出来

  • 相关阅读:
    Linux下yum安装mysql
    centos下无法使用lsof命令"-bash: lsof: command not found"
    大数据与区块链的联系与区别
    java.lang.NullPointerException报错的几种情况
    算法概述
    区块链简史
    word导出失败问题
    [Python3网络爬虫开发实战] 1.9.5-Scrapyrt的安装
    [Python3网络爬虫开发实战] 1.9.3-Scrapyd-Client的安装
    [Python3网络爬虫开发实战] 1.9.2-Scrapyd的安装
  • 原文地址:https://www.cnblogs.com/ScarecrowAnBird/p/8583833.html
Copyright © 2011-2022 走看看