使用Clojure中的數據庫的方法有哪些?在Clojure中使用數據庫
我從Clojure知道你可以用Java做任何事情,但這意味着我最終可能會使用與Clojure簡單性相沖突的過於複雜的東西(如Hibernate)。任何建議或意見?
使用Clojure中的數據庫的方法有哪些?在Clojure中使用數據庫
我從Clojure知道你可以用Java做任何事情,但這意味着我最終可能會使用與Clojure簡單性相沖突的過於複雜的東西(如Hibernate)。任何建議或意見?
clojure-contrib有一個sql庫,它是JDBC(java.sql.DriverManager)的一個薄包裝器。隨附的測試文件中有一些使用示例。
如果您願意使用Java庫,但想要一些簡單的東西,也許您會喜歡Persist。它只需要你10分鐘來看看它是否符合你的需求。
我已經使用了Berkeley DB爲Clojure中的簡單鍵/值數據庫。請參閱here。
如果您需要持久連接和/或連接到多個數據庫,並且不想每隔一段時間重新建立連接,我會建議使用數據庫連接池。像BoneCP或Tomcat CP。
您可以將DataSources從這些包提供給(clojure.contrib.sql/with-connection ...)。
有ClojureQL其中包含關係代數。
您也可以嘗試CLJ-記錄,https://github.com/duelinmarkers/clj-record
我現在(截至2011年末)推薦Korma - 「爲Clojure的美味SQL」
這是一個美麗的小SQL DSL,這裏是從一個例子網址:
(select users
(aggregate (count :*) :cnt)
(where (or (> :visits 20)
(< :last_login a-year-ago))))
現在有Datomic以及許多類似的解決方案,如DataScript也用於非常有趣的關係(非sql!)數據庫功能。
SQL數據庫的最新和最好的似乎是HoneySQL和Yesql。
HoneySQL是一個非常優雅的DSL來生成SQL查詢。有傳言稱它甚至可以修改報告中予以高度優化的,請參閱從2月24日2015年
Clojure的組線程「 Current best-of-breed JDBC libraries?」尼爾斯麪包車Klaveren說,在上述螺紋:
「基本上,它[HoneySQL]生成SQL腳本來重新鏈接外鍵引用以清理數據庫中的重複內容。它至少需要一個包含from
表,group-by
和order-by
子句的honeysql select查詢作爲基本定義,需要考慮的雙打,並保存記錄的順序。在與該查詢有效地被改寫,生成JDBC元數據組合:
創建最好的表演,但仍獨立於數據庫的SQL,我不得不延長honeysql附加條款如OVER
和PARTITION BY
。我不會說這是一件輕而易舉的事,但似乎工作得很好。
...
這減少的SQL(有時)GB的腳本來圍繞着幾個100行SQL,並有一次,19小時運行時間1.5分鐘。」
Yesql,另一方面,目的是爲總簡單起見它定義了一些函數來加載參數.sql
-files
這是網頁提到下面的「賣點」:。
(raw-sql "some('funky'::SYNTAX)")
函數。然後是SQLLite。看看這個簡單的例子:https://github.com/ogrim/clojure-sqlite-example
clojure-contrib已經移動。它現在在這裏:http://code.google.com/p/clojure-contrib/ – 2009-10-21 07:06:21
實際上,自從我發佈這個版本以來,它已經移動了兩次。它現在在這裏:http://github.com/richhickey/clojure-contrib :) – 2009-10-21 08:43:50
你應該看看clojure ql。 – nickik 2010-11-11 18:51:11