ADB中是否和mysql一样支持以下流读取方式; statement设置以下属性时,采用的是流数据接收方式,每次只从服务器接收部份数据,直到所有数据处理完毕,不会发生JVM OOM。 Stat.setResultSetType(ResultSet.TYPE_FORWARD_ONLY); Stat.setFetchSize(Integer.MIN_VALUE); ?
在阿里云ADB中,不支持直接使用Statement.setFetchSize(Integer.MIN_VALUE)
的方式采用流数据接收方式,这是因为ADB中的JDBC驱动底层是基于PostgreSQL的。PostgreSQL的JDBC驱动只支持用户使用setFetchSize()
方法设置每次从数据库中获取数据的批量大小(即返回结果集的行数)。在PostgreSQL默认情况下,ResultSet
会在检索数据时尝试将整个结果集返回本地内存中,如果结果集太大,可能会导致OutOfMemory
错误。
PostgreSQL的JDBC驱动为了解决这个问题,提供了setFetchSize()
方法。使用该方法可以减少连接程序退出时由于结果集大小过大而产生的内存溢出错误的可能性。应用程序可以在检索数据时,提前告知ResultSet
每次检索数据的行数,即设置每次从数据库中返回的结果集的批量大小,以减少结果集产生的内存压力。
在ADB中使用流数据接收方式的场景中,建议可以考虑使用分页查询的方式,通过限制每页的记录数来避免一次性取得过多的数据。这样,不仅可以避免潜在的OOM问题,也能更好的控制查询结果集的大小,提升查询效率。
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
阿里云自主研发的云原生数据仓库,具有高并发读写、低峰谷读写、弹性扩展、安全可靠等特性,可支持PB级别数据存储,可广泛应用于BI、机器学习、实时分析、数据挖掘等场景。包含AnalyticDB MySQL版、AnalyticDB PostgreSQL 版。