ITPub博客

首页 > 数据库 > SQL on Hadoop > JAVA应用程序访问EsgynDB单个大数据量表,返回结果集数据很大的优化

JAVA应用程序访问EsgynDB单个大数据量表,返回结果集数据很大的优化

原创 SQL on Hadoop 作者:joshliu 时间:2020-12-24 15:55:54 1 删除 编辑

【问题描述】

        在某业务场景中,应用程序连接数据库执行查询语句,查询语句的结果集有22万数据,22万的数据通过网络传输到应用端,应用端再处理;

        EsgynDB默认情况下是单次返回查询结果集的200,22万数据需要传输22万/200=1100次,多次传输会导致性能的下降;

【问题原因】

        多次传输导致的性能下降,减少传输次数

【问题解决】

        1. 应用URL修改

String url = "jdbc:t4jdbc://localhost:23400/:fetchBufferSize=30000";

        2. prepareStatement之后,需要st.setFetchSize

preparedStatement.setFetchSize(120000);

        3. 添加CQD  

cqds.add("cqd HBASE_NUM_CACHE_ROWS_MAX '110000'");  ## 设置一次从hbase中取多少行出来
cqds.add("cqd HBASE_NUM_CACHE_ROWS_MIN '110000'");  ## 设置一次从hbase中取多少行出来

【附录】

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.math.BigDecimal;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.util.ArrayList;
import java.util.List;
import java.util.Random;
/**
 * @ClassName: EsgynJdbcSimple
 * @Description: TODO
 * @author: xl
 * @date: Nov 26, 2020 2:09:26 PM
 */
public class TryFor614plpm {
    private static final Logger LOG = LoggerFactory.getLogger(TryFor614plpm.class);
    /**
     * @Title: main
     * @Description: TODO
     * @param args
     */
    public static void main(String[] args) {
        String sql2 = "select * from t614.jtk_xx where eid='19011100001' and workdate='2020-06-22' and channel='B'";
        try {
            Class.forName("org.trafodion.jdbc.t4.T4Driver");
            Connection conn = DriverManager.getConnection("jdbc:t4jdbc://10.12.40.12:23400/:fetchBufferSize=30000"
                    , "db__root", "trafodion");
            List<String> cqds=new ArrayList<>();
//            cqds.add("set schema t614");
//			cqds.add("cqd DETAILED_STATISTICS 'off';");
//			cqds.add("cqd EXPLAIN_IN_RMS 'off';");
//			cqds.add("cqd GENERATE_EXPLAIN 'off';");
//			cqds.add("cqd HBASE_CACHE_BLOCKS 'off';");
//			cqds.add("cqd upd_ordered 'off';");
//			cqds.add("cqd QUERY_CACHE_MAX_EXPRS '1800';");
            cqds.add("cqd HBASE_NUM_CACHE_ROWS_MAX '120000'");
            cqds.add("cqd HBASE_NUM_CACHE_ROWS_MIN '120000'");
            cqds.add("cqd ATTEMPT_ESP_PARALLELISM 'off'");
            for(String cqd :cqds){
                conn.createStatement().execute(cqd);
            }
            PreparedStatement preparedStatement = conn.prepareStatement(sql2);
            preparedStatement.setFetchSize(120000);
            long starttime = System.currentTimeMillis();
            ResultSet rs=preparedStatement.executeQuery();
            long endtime = System.currentTimeMillis();
            int count_wb = 0;
            while(rs.next()) {
                count_wb = rs.getRow();
            }
            System.out.println("result set size:"+count_wb+"\tcost time: "+(endtime-starttime)+ " ms");
            preparedStatement.close();
            conn.close();
            //
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}


来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/69985104/viewspace-2745016/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2020-10-09

  • 博文量
    78
  • 访问量
    74235