Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/clojure/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用JDBC和Clojure访问大型ish数据集的有效方法是什么 编辑_Jdbc_Clojure_Processing Efficiency - Fatal编程技术网

使用JDBC和Clojure访问大型ish数据集的有效方法是什么 编辑

使用JDBC和Clojure访问大型ish数据集的有效方法是什么 编辑,jdbc,clojure,processing-efficiency,Jdbc,Clojure,Processing Efficiency,结果是N00b出现了问题。我没有意识到运行lein ring server会导致应用程序以解释模式运行,这就是为什么它要慢得多的原因。 下面的Clojure/JDBC片段是否可以优化以使其运行(更快)呢 我正在考虑将Clojure用于ETL项目。我写的第一个测试是从一个表中打印数据,其中有280K条记录。到目前为止,我提出的实现相当缓慢;在Java中大约需要12秒(甚至使用myBatis来填充对象而不是“原始”访问)在Clojure解决方案中大约需要9.5分钟 我尝试使用map而不是doseq

结果是N00b出现了问题。我没有意识到运行
lein ring server
会导致应用程序以解释模式运行,这就是为什么它要慢得多的原因。
下面的Clojure/JDBC片段是否可以优化以使其运行(更快)呢

我正在考虑将Clojure用于ETL项目。我写的第一个测试是从一个表中打印数据,其中有280K条记录。到目前为止,我提出的实现相当缓慢;在Java中大约需要12秒(甚至使用myBatis来填充对象而不是“原始”访问)在Clojure解决方案中大约需要9.5分钟

我尝试使用map而不是doseq,并尝试使用如下所述的游标:,但每个游标的执行时间大致相同

FWIW,在执行
.println java.lang.System/out
(毫不奇怪)并与查询结果一起使用时得到相同的结果*:

(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))))))

同样,同样。

这太尴尬了。。。事实证明,相对较差的性能是由于将我的测试代码作为简单web应用程序的一部分运行(我知道,这在这个问题的上下文中是没有意义的),我使用
lein ring server运行它,我猜这与使用
repl
运行它是一样的(我只是没有建立连接)。当我尝试用
lein uberjar
编译和打包,然后用
java-jar
执行jar时,它给了我与java应用程序相当的性能。

如果你只是用Clojure操作原始结果集,你的时代会是什么样子?@Bill不确定你在想什么。没用这是我的第一天Clojure:-)@Bill我做了测试它在我的答案中,奇怪的是时间更糟糕。。。似乎有某种魔力在背后发生。起初我认为这是由于JIT的缘故,我将jdbc复制到jdbc2(源文件)并从repl中使用它,在多次运行时间收敛之后。将
ResultSet
传递给调用者可以神奇地提高运行时间。很高兴知道您找到了修复方法,我想我现在将删除我的“答案”。虽然看起来您也有一些有趣的发现@IvanKoblik:-)我在clojure中的代码速度几乎是原来的两倍,但这对我来说是可以接受的,而且,这些测试不足以得出一个艰难的结论。我只是很高兴我没有找到一个交易破坏者,因为我喜欢迄今为止我对Clojure所做的一点点。
(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))))))