ADB中setfetchsize()没报错,每次只从服务器接收部份数据,直到所有数据处理完毕,-问答-阿里云开发者社区-阿里云

开发者社区 > 数据库 > 正文

ADB中setfetchsize()没报错,每次只从服务器接收部份数据,直到所有数据处理完毕,

ADB中setfetchsize()没报错,每次只从服务器接收部份数据,直到所有数据处理完毕,不会发生JVM OOM。难道不支持???image.png

展开
收起
cuicuicuic 2023-05-17 14:53:22 44468 0
3 条回答
写回答
取消 提交回答
  • 目前确实的不支持的。此回答整理自钉群“云数据仓库ADB-开发者群”

    2023-07-05 13:37:35
    赞同 展开评论 打赏
  • 关于您提出的这些问题,我给您做如下回答:

    问题1:ADB 中是支持 setFetchSize() 方法的,通过 setFetchSize() 方法可以设置每次从服务器端获取数据的行数。在循环读取数据时,使用 ResultSet 的 next() 方法逐行读取数据。不会发生 JVM OOM 的情况取决于您设置的 FetchSize 和 JDBC 驱动的实现方式,合理的设置和调整可以避免出现内存问题。

    以下是一个使用 FetchSize 的示例代码:

    Connection conn = DriverManager.getConnection(url, user, password);
    PreparedStatement stmt = conn.prepareStatement("select * from my_table");
    stmt.setFetchSize(1000);
    
    ResultSet rs = stmt.executeQuery();
    while (rs.next()) {
        // 处理每一行数据
    }
    

    在这个示例中,我设置了 FetchSize 为 1000,代表每次从服务器获取 1000 行数据。在循环读取数据时,使用 ResultSet 的 next() 方法按行读取数据。

    问题2:使用 setFetchSize() 方法后,数据并非一次性读取,而是按照设置的 FetchSize 分批次读取到客户端。只不过在实际读取数据时,由于 JDBC 驱动通常会预取一定数量的数据到本地客户端缓存,以提高性能和响应速度。这也就意味着即使您设置了 FetchSize,也不一定能完全避免内存问题,取决于总数据量和客户端机器的内存大小等因素。

    问题3:对于大数据量情况下,为了避免出现内存问题,常用的方法是进行数据分页读取。您可以将数据按照某种方式分成多个部分,每次读取一部分数据,并对每个部分进行处理或者合并。对于分页读取数据,ADB 中支持使用 LIMIT 和 OFFSET 语法进行分页查询,例如:

    SELECT * FROM my_table LIMIT 10 OFFSET 20;
    

    以上查询语句表示从 my_table 表中获取 10 条数据,起始位置从第 21 条数据开始。您可以通过改变 OFFSET 的值以达到分页读取数据的目的。

    除此之外,ADB 还支持使用 OLAP 分析方法,例如使用窗口函数 ROW_NUMBER() 进行分页读取数据,或者使用存储过程、UDF 等高级特性进行数据处理和计算等。根据实际需求和场景,选择适合的方案可以有效地避免内存问题。

    2023-05-20 16:53:23
    赞同 展开评论 打赏
  • 公众号:网络技术联盟站,InfoQ签约作者,阿里云社区签约作者,华为云 云享专家,BOSS直聘 创作王者,腾讯课堂创作领航员,博客+论坛:https://www.wljslmz.cn,工程师导航:https://www.wljslmz.com

    阿里云ADB中的setFetchSize()方法是支持的,它可以用来指定每次从服务器获取数据的大小。

    如果每次只从服务器接收部分数据而不会发生JVM OOM,可能是因为您的数据量比较小,可以在内存中轻松处理完毕。但是,如果处理的数据量很大,建议您在查询时使用分页,或者使用较小的fetch size,以避免产生OOM异常。

    如果您在使用setFetchSize()方法时遇到了问题,可以尝试检查一下JDBC驱动版本是否正确或是其他代码问题。

    2023-05-20 07:59:32
    赞同 展开评论 打赏
数据库领域前沿技术分享与交流
相关电子书
更多
服务器的第一道防线-美联集团堡垒的前世今生
立即下载
机器学习在大规模服务器治理复杂场景的实践
立即下载
函数计算事件驱动的无服务器计算服务
立即下载