2009-06-15 59 views
7

顯而易見的方法是從Clojure Contrib加載JDBC支持並編寫一些函數將地圖/結構轉換爲表格。這樣做的一個缺點是它不夠靈活。對結構的更改將需要DDL更改。這意味着要麼編寫DDL代(難)或手工編碼遷移(無聊)。在Clojure中保存地圖/結構體的最簡單方法是什麼?

還有什麼替代方案?答案必須是ACID,排除序列化到文件等。

回答

5

使用CouchDB的Java客戶端庫和clojure.contrib.json.read/write對我來說工作得很好。不過,CouchDB的一致性保證可能不足以滿足您的需求。

2

Clj-record是clojure中的一個活動記錄的實現,您可能會感興趣。

7

在Clojure中保留仍使用關係數據庫的地圖的一種選擇是將地圖數據存儲在不透明的blob中。如果您需要搜索記錄的功能,則可以將索引存儲在單獨的表中。例如,您可以閱讀FriendFeed如何在MySQL頂部存儲無模式數據 - http://bret.appspot.com/entry/how-friendfeed-uses-mysql

另一種選擇是使用實體屬性值模型(EAV)將數據存儲在數據庫中。你可以在維基百科上閱讀更多關於EAV的信息(我會發佈一個鏈接,但我是一個新用戶,只能發佈一個鏈接)。

另一種選擇是使用BerkeleyDB for Java--它是一種提供ACID和記錄級鎖定的本地Java解決方案。 (與發佈鏈接相同的問題)。

+1

+1,這樣希望您可以開始使用更多的鏈接不久的某個時候:-) – mikera 2011-01-09 17:53:41

2

您可以嘗試基於Java的圖形數據庫之一,如Neo4J。編碼一個hashmap接口使其合理透明可能很容易。

+0

有一些人使用的Neo4j使用Clojure,有在這裏看看不同的包裝器實現:http://wiki.neo4j.org/content/Clojure – nawroth 2009-08-02 10:57:52

1

MongoDB和它的框架congomongo(lein:[congomongo「0.1.3-SNAPSHOT」))適合我。對於無模式數據庫來說,這非常棒,而且congomongo很容易相處。 MongoDB在每個文檔中都添加了一個_id字段以確保它的識別,並且clojure-maps和mongo-maps之間有相當好的透明度。

https://github.com/somnium/congomongo

9

FleetDB是Clojure中實現的數據庫。它具有用於處理地圖/結構的非常自然的語法,例如,插入:

(client ["insert" "accounts" {"id" 1, "owner" "Eve", "credits" 100}]) 

然後選擇

(client ["select" "accounts" {"where" ["=" "id" 1]}]) 

http://fleetdb.org/

+1

過去3年沒有提交,看起來像.org域擁有新的所有權。 https://github.com/mmcgrana/fleetdb – Joanis 2014-05-04 01:33:48

相關問題