ToFind1996 2019-03-18 11:21 采纳率: 0%
浏览 569

java GZIPOutputStream性能如何提升?

当前业务为查询库内数据压缩为gz压缩包,然后上传。现在速度很慢,已经尝试优化sql,sql查询速度提升了7倍还是无法满足需求,如何提升gz压缩速度呢?
部分代码如下:

gos = new java.util.zip.GZIPOutputStream(new BufferedOutputStream(new FileOutputStream(new File(localPath+fileName+".gz"+fileNameCrSuffix)),2*1024*1024),2*1024*1024);
        var processTime1 = System.currentTimeMillis();
        ESB.log.info(objInfo.name+"执行DTL,querysqlinfo:"+squerySqlStr);
        stmt = threadDbConn.prepareStatement(querySqlStr);
        //stmt.setFetchSize(10000);
        var sindex = 1;
        if(beginValue!=null&&endValue!=null){//判断是否分段处理
            setValue(stmt,sindex,beginValue,tempInfo.fdValueType);
            sindex++;
            setValue(stmt,sindex,endValue,tempInfo.fdValueType);
            sindex++;
        }
        if(sqlValues!=null){
            for(var j=0;j<sqlValues.length;j++){
                var index = j+sindex;
                setValue(stmt,index,sqlValues[j][1],sqlValues[j][0]);
            }
        }
        var rs = stmt.executeQuery();
        var processTime2 = System.currentTimeMillis();
        while(rs.next()){

            gos.write(rs.getString(1).getBytes(charSet));
        }
        rs.close();
        stmt.close();
        gos.finish();
        gos.flush();
        gos.close();
        var processTime3 = System.currentTimeMillis();
  • 写回答

1条回答 默认 最新

  • shaffer_w 2019-03-18 17:24
    关注

    (建议先排查下,是不是你的磁盘IO拖慢了速度)
    如果你真的认为是压缩算法耗时,那可以改成多线程来提升,毕竟现在的CPU都是多核。
    将从数据库读取的原始数据放到一个queue中,再启动多个线程从queue中取数据并压缩。然后将压缩后的数据,按顺序写盘

    评论

报告相同问题?

悬赏问题

  • ¥15 DIFY API Endpoint 问题。
  • ¥20 sub地址DHCP问题
  • ¥15 delta降尺度计算的一些细节,有偿
  • ¥15 Arduino红外遥控代码有问题
  • ¥15 数值计算离散正交多项式
  • ¥30 数值计算均差系数编程
  • ¥15 redis-full-check比较 两个集群的数据出错
  • ¥15 Matlab编程问题
  • ¥15 训练的多模态特征融合模型准确度很低怎么办
  • ¥15 kylin启动报错log4j类冲突