ADB中是否和mysql一样支持以下流读取方式; statement设置以下属性时,采用的是流数据接收方式,每次只从服务器接收部份数据,直到所有数据处理完毕,不会发生JVM OOM。 Stat.setResultSetType(ResultSet.TYPE_FORWARD_ONLY); Stat.setFetchSize(Integer.MIN_VALUE); ?
ADB中是否和mysql一样支持以下流读取方式;statement设置以下属性时,采用的是流数据?[阿里云云原生数据仓库]
「点点赞赏,手留余香」
还没有人赞赏,快来当第一个赞赏的人吧!
在阿里云ADB中,不支持直接使用
Statement.setFetchSize(Integer.MIN_VALUE)
的方式采用流数据接收方式,这是因为ADB中的JDBC驱动底层是基于PostgreSQL的。PostgreSQL的JDBC驱动只支持用户使用setFetchSize()
方法设置每次从数据库中获取数据的批量大小(即返回结果集的行数)。在PostgreSQL默认情况下,ResultSet
会在检索数据时尝试将整个结果集返回本地内存中,如果结果集太大,可能会导致OutOfMemory
错误。PostgreSQL的JDBC驱动为了解决这个问题,提供了
setFetchSize()
方法。使用该方法可以减少连接程序退出时由于结果集大小过大而产生的内存溢出错误的可能性。应用程序可以在检索数据时,提前告知ResultSet
每次检索数据的行数,即设置每次从数据库中返回的结果集的批量大小,以减少结果集产生的内存压力。在ADB中使用流数据接收方式的场景中,建议可以考虑使用分页查询的方式,通过限制每页的记录数来避免一次性取得过多的数据。这样,不仅可以避免潜在的OOM问题,也能更好的控制查询结果集的大小,提升查询效率。
ADB目前不支持。,此回答整理自钉群“云数据仓库ADB-开发者群”