大数据量的插入和查询解决方案的方法


        这次在做项目的时候,遇到一个比较麻烦的点就是要查询全面信息,和插入数据量比较大的数据,刚刚开始呢,一个一个插入和一个个查询比较麻烦,咨询了他们两个解决方案

①  批量查询和批量插入,这个还只是针对数据不是特别大的时候,正好这次的项目是1w条插入和没有规定的条数的查询

②  如果以后数据量非常大的时候几十万,百万的时候这个速度就算批量也可能很慢了,这时候建议的是异步处理@Async,就是插入刚刚开始的时候添加一个loading的状态,直接返回(其实觉得这个应该是只是针对没有返回什么数据格式的时候)这个时候特别适用这个

将第一种方案代码

public  List<String> getDistinct(List<String> list,Integer type,Long userId,List<String> fails){
        Integer total = list.size();
        int limit = 2000;
        List<Barcode> sameBarcode = Lists.newArrayList();
        List<String> distinctString = Lists.newArrayList();
        for (int i = total; i>0; i=i-limit) {
            List<String> listString = list.subList(i-limit<0?0:i-limit,i);
            List<Barcode> barcodeList = barcodeDao.findByNumbers(userId,listString,type.toString());
            sameBarcode.addAll(barcodeList);
        }
        for (Barcode barcode:sameBarcode){
            distinctString.add(barcode.getNumber());
        }
        HashSet h1 = new HashSet(list);
        HashSet h2 = new HashSet(distinctString);
        h1.removeAll(h2);
        List<String> list1 = new ArrayList(h1);
        fails.addAll(distinctString);
        return list1;
    }

插入代码

Integer total = success.size();
        int limit = 1000;
        for (int i = total; i>0; i=i-limit) {
            List<Barcode> listBanth = barcodeList.subList(i-limit<0?0:i-limit,i);
            barcodeDao.saveBarth(listBanth);
        }

sql写法

@Insert("<script>" +
            "insert into `barcode` (`type`, `user_id`, `number`, `created_time`, `status`, `import_id`,`country_code`,`makers_code`,`generation_type`,`product_code`)values" +
            "<foreach collection=\"array\" item=\"item\" index=\"index\" separator=\",\">" +
            "   (#{item.type} ,#{item.userId} ,#{item.number}, #{item.createdTime}, #{item.status} ,#{item.importId},#{item.countryCode},#{item.makersCode},#{item.generationType},#{item.productCode})" +
            "</foreach>" +
            "</script>")
    void saveBarth(@Param("array")List<Barcode> orders);

 


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM