【发布时间】:2016-06-23 01:05:27
【问题描述】:
有一个similar question about streaming large results,但答案只是指向文档,没有明确的答案出现。 我相信仅treating a full result set as a stream 在 jdbc 驱动端仍然会占用大量内存..
我想知道是否有任何明确的模式或最佳实践可以让它发挥作用,尤其是在 jdbc 驱动程序方面。
特别是我不知道为什么setFetchSize(Integer.MIN_VALUE) 是一个非常好的主意,因为如果这意味着每行都通过网络单独发送,这似乎远非最佳。
我相信像 jooq 和 slick 这样的库已经解决了这个问题......并且很好奇如何在有和没有它们的情况下完成它。
谢谢!
【问题讨论】:
-
P.S.在使用 slick 时,postgres 有一些涉及和特定的东西:stackoverflow.com/questions/31340507/…
-
文档 (dev.mysql.com/doc/connector-j/en/…) 说要么所有内容都加载到内存中,要么逐一检索行。其他数据库驱动程序有更明智的方法。
-
不,我不是。但是,如果有其他选择,那就应该讨论它。这里还记录了
useCursorFetch属性 (dev.mysql.com/doc/connector-j/en/…),但我不清楚它的确切含义,以及 fetchSize 的实际值是否用于任何用途。 -
最近的相关问题here 可能很有趣,特别是关于使用 MySQL 的 JDBC 方面。
-
为了记录(因为您用jooq 标记了这个问题),jOOQ 在这里没有也不应该帮助您。流式传输服务器网络协议的职责。 JDBC 是协议抽象 API。 jOOQ 是一种 SQL 语言抽象 API,因此不应干扰 JDBC。虽然 jOOQ 确实支持
java.util.stream.Stream用于流式传输结果,但这种高级抽象并未假设记录是如何通过网络传输的。