JAVA一次性读取Mysql几十万条大数据的处理

前言

不用说也知道,一次性读取出那么大的数据是疯了吗,虚拟机能承受的聊那么大的对象吗?,所以我们需要分批进行读取。

下面是使用fenduan 每1万条进行一次读取执行

    public void keyToVolumn() {
        log.info("开始进行转移");

        Long count = couponTaoKeDataMapper.countAll();
        Long fenduan = 10000L;
        Long num = count / fenduan;
        Long yushu = count % fenduan;

        System.out.println(num);
        System.out.println(yushu);
        for (int i = 1; i <= 34; i++) {

            List<CouponTaoKeData> couponTaoKeDatas = couponTaoKeDataMapper.findAll((i - 1) * fenduan + 1, i * fenduan);
            log.info((i - 1) * fenduan + 1 + "查找数据成功" + i * fenduan + "插入完成");
            for (CouponTaoKeData couponTaoKeData : couponTaoKeDatas) {
                inserVolumn(couponTaoKeData);
            }
            log.info((i - 1) * fenduan + 1 + "到" + i * fenduan + "插入完成");

        }
        Long yushufinal = num * fenduan + yushu;
        List<CouponTaoKeData> couponTaoKeDatas = couponTaoKeDataMapper.findAll(num * fenduan + 1, yushufinal);
        for (CouponTaoKeData couponTaoKeData : couponTaoKeDatas) {
            inserVolumn(couponTaoKeData);
        }
        log.info("全部插入成功");
    }


    @Transactional(propagation = Propagation.REQUIRES_NEW, rollbackFor = Exception.class)
    public void inserVolumn(CouponTaoKeData couponTaoKeData) {

        }

/*

    public static void main(String[] args) {
       Long count = 340000L;
       Long fenduan = 5000L;
       Long num = count/fenduan ;
       Long yushu = count%fenduan;

        System.out.println(num);
        System.out.println(yushu);
        for(int i = 1 ; i<=34 ;i++){
            System.out.println((i-1)*fenduan+1 +"|"+ i*fenduan);
        }
        Long yushufinal = num*fenduan+yushu ;
        System.out.println(num*fenduan+1 +"|"+yushufinal);

    }
*/





如果满意,请打赏博主任意金额,感兴趣的在微信转账的时候,添加博主微信哦, 请下方留言吧。可与博主自由讨论哦

支付包 微信 微信公众号
支付宝 微信 微信公众号

猜你喜欢

转载自blog.csdn.net/u012954706/article/details/81225710