大數據量的插入和查詢解決方案的方法


        這次在做項目的時候,遇到一個比較麻煩的點就是要查詢全面信息,和插入數據量比較大的數據,剛剛開始呢,一個一個插入和一個個查詢比較麻煩,咨詢了他們兩個解決方案

①  批量查詢和批量插入,這個還只是針對數據不是特別大的時候,正好這次的項目是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