根据the release notes for the MySQL JDBC driver,当且仅当使用并发只读,只进向结果和完全为Integer/MIN_VALUE的提取大小的连接时,它应该流式传输结果。但是,当我试图生成这些条件(针对[mysql/mysql-connector-java "5.1.21"]
)时,我的SQL查询仍然会永久运行(或者说,直到它耗尽JVM的内存并出现繁荣时)。使用clojure.java.jdbc从MySQL进行流式传输
(let [query (query-only (fetch-all big-table))]
(clojure.java.jdbc/with-connection (get-connection (:db query))
(clojure.java.jdbc/with-query-results rows
(into [{:fetch-size Integer/MIN_VALUE
:concurrency :read-only
:result-type :forward-only} (:sql-str query)]
(:params query))
(throw (Exception. (str "retrieved a row: " (pr-str (first rows)))))))))