2008-11-17 40 views
38

使用Clojure中的數據庫的方法有哪些?在Clojure中使用數據庫

我從Clojure知道你可以用Java做任何事情,但這意味着我最終可能會使用與Clojure簡單性相沖突的過於複雜的東西(如Hibernate)。任何建議或意見?

回答

18

clojure-contrib有一個sql庫,它是JDBC(java.sql.DriverManager)的一個薄包裝器。隨附的測試文件中有一些使用示例。

+0

clojure-contrib已經移動。它現在在這裏:http://code.google.com/p/clojure-contrib/ – 2009-10-21 07:06:21

+6

實際上,自從我發佈這個版本以來,它已經移動了兩次。它現在在這裏:http://github.com/richhickey/clojure-contrib :) – 2009-10-21 08:43:50

+0

你應該看看clojure ql。 – nickik 2010-11-11 18:51:11

8

如果您願意使用Java庫,但想要一些簡單的東西,也許您會喜歡Persist。它只需要你10分鐘來看看它是否符合你的需求。

5

我已經使用了Berkeley DB爲Clojure中的簡單鍵/值數據庫。請參閱here

1

如果您需要持久連接和/或連接到多個數據庫,並且不想每隔一段時間重新建立連接,我會建議使用數據庫連接池。像BoneCP或Tomcat CP。

您可以將DataSources從這些包提供給(clojure.contrib.sql/with-connection ...)。

14

我現在(截至2011年末)推薦Korma - 「爲Clojure的美味SQL」

這是一個美麗的小SQL DSL,這裏是從一個例子網址:

(select users 
    (aggregate (count :*) :cnt) 
    (where (or (> :visits 20) 
      (< :last_login a-year-ago)))) 
8

我想添加一個2011年11月的答案,以便來自谷歌的任何人來到這裏。

Clojure 1.3當前的核心SQL訪問庫是clojure.java.jdbc。在ClojureQLKorma之上有一些非常好的庫。

4

現在有Datomic以及許多類似的解決方案,如DataScript也用於非常有趣的關係(非sql!)數據庫功能。

8

SQL數據庫的最新和最好的似乎是HoneySQLYesql

HoneySQL是一個非常優雅的DSL來生成SQL查詢。有傳言稱它甚至可以修改報告中予以高度優化的,請參閱從2月24日2015年

Clojure的組線程「 Current best-of-breed JDBC libraries?

尼爾斯麪包車Klaveren說,在上述螺紋:

「基本上,它[HoneySQL]生成SQL腳本來重新鏈接外鍵引用以清理數據庫中的重複內容。它至少需要一個包含from表,group-byorder-by子句的honeysql select查詢作爲基本定義,需要考慮的雙打,並保存記錄的順序。在與該查詢有效地被改寫,生成JDBC元數據組合:

  • 臨時替換表
  • 查詢統一唯一索引,以防止發生衝突時,外鍵引用更新
  • 查詢更新所有外鍵引用
  • DELETE語句刪除所有複製

創建最好的表演,但仍獨立於數據庫的SQL,我不得不延長honeysql附加條款如OVERPARTITION BY。我不會說這是一件輕而易舉的事,但似乎工作得很好。

...

這減少的SQL(有時)GB的腳本來圍繞着幾個100行SQL,並有一次,19小時運行時間1.5分鐘。」

Yesql,另一方面,目的是爲總簡單起見它定義了一些函數來加載參數.sql -files

這是網頁提到下面的「賣點」:。

  • 沒有語法驚喜。你的數據庫不遵守SQL標準 - 它們都不會 - 但是Yesql不關心。你永遠不會花時間去尋找「等同的sexp語法」。你永遠不需要回到(raw-sql "some('funky'::SYNTAX)")函數。
  • 更好的編輯器支持。你的編輯器可能已經有很好的SQL支持。通過將SQL保持爲SQL,您可以使用它。
  • 團隊互操作性。您的DBA可以讀寫您在Clojure項目中使用的SQL。
  • 更簡單的性能調整。需要解釋該查詢計劃?當你的查詢是普通的SQL時,它會容易得多。
  • 查詢重用。將相同的SQL文件放入其他項目中,因爲它們只是普通的SQL。將它們分享爲子模塊。