编辑
事实证明,N00b 问题。我没有意识到运行lein ring server
会导致您的应用程序以解释模式运行,这就是它慢得多的原因。
可以优化以下 Clojure/JDBC 片段以使其运行(更快)速度吗?
(defn test-sql []
(sql/with-connection (db-connection)
(sql/with-query-results results ["select * from users order by username asc"]
(doseq [row results ]
(println "User" (row :first_name) (row :last_name)) results))))
我正在考虑将 Clojure 用于 ETL 项目。我写的第一个测试是从我有大约 280K 记录的表中打印出数据。到目前为止,我提出的实现非常缓慢。在 Java 中大约需要 12 秒(即使使用 myBatis 填充对象而不是“原始”访问)使用我的 Clojure 解决方案需要大约 9.5 分钟。
我尝试使用地图而不是doseq,并尝试使用此处概述的光标:http://asymmetrical-view.com/2010/10/14/clojure-and-large-result-sets.html ,但我得到的结果大致相同每个的执行时间。
FWIW,执行.println java.lang.System/out
(不足为奇)和使用 with-query-results* 时的结果相同:
(defn test-sql2 []
(sql/with-connection (db-connection)
(sql/with-query-results* ["select * from users order by username asc"]
(fn [row] (println "User" (row :first_name) (row :last_name))))))
彼此彼此。