編集
結局のところ、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))))
ETL プロジェクトに Clojure を使用することを検討しています。私が書いた最初のテストは、そこに ~280K のレコードがあるテーブルからデータを出力することでした。これまでに思いついた実装はかなり遅かったです。Java で約 12 秒かかるのに (「raw」アクセスではなく myBatis を使用してオブジェクトを設定しても)、Clojure ソリューションでは約 9.5 分かかります。
dosq の代わりに map を試し、ここで概説されているようなカーソルを使用してみました: 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))))))
同じ同じ。