顯而易見的方法是從Clojure Contrib加載JDBC支持並編寫一些函數將地圖/結構轉換爲表格。這樣做的一個缺點是它不夠靈活。對結構的更改將需要DDL更改。這意味着要麼編寫DDL代(難)或手工編碼遷移(無聊)。在Clojure中保存地圖/結構體的最簡單方法是什麼?
還有什麼替代方案?答案必須是ACID,排除序列化到文件等。
顯而易見的方法是從Clojure Contrib加載JDBC支持並編寫一些函數將地圖/結構轉換爲表格。這樣做的一個缺點是它不夠靈活。對結構的更改將需要DDL更改。這意味着要麼編寫DDL代(難)或手工編碼遷移(無聊)。在Clojure中保存地圖/結構體的最簡單方法是什麼?
還有什麼替代方案?答案必須是ACID,排除序列化到文件等。
使用CouchDB的Java客戶端庫和clojure.contrib.json.read/write
對我來說工作得很好。不過,CouchDB的一致性保證可能不足以滿足您的需求。
Clj-record是clojure中的一個活動記錄的實現,您可能會感興趣。
在Clojure中保留仍使用關係數據庫的地圖的一種選擇是將地圖數據存儲在不透明的blob中。如果您需要搜索記錄的功能,則可以將索引存儲在單獨的表中。例如,您可以閱讀FriendFeed如何在MySQL頂部存儲無模式數據 - http://bret.appspot.com/entry/how-friendfeed-uses-mysql
另一種選擇是使用實體屬性值模型(EAV)將數據存儲在數據庫中。你可以在維基百科上閱讀更多關於EAV的信息(我會發佈一個鏈接,但我是一個新用戶,只能發佈一個鏈接)。
另一種選擇是使用BerkeleyDB for Java--它是一種提供ACID和記錄級鎖定的本地Java解決方案。 (與發佈鏈接相同的問題)。
MongoDB和它的框架congomongo(lein:[congomongo「0.1.3-SNAPSHOT」))適合我。對於無模式數據庫來說,這非常棒,而且congomongo很容易相處。 MongoDB在每個文檔中都添加了一個_id字段以確保它的識別,並且clojure-maps和mongo-maps之間有相當好的透明度。
FleetDB是Clojure中實現的數據庫。它具有用於處理地圖/結構的非常自然的語法,例如,插入:
(client ["insert" "accounts" {"id" 1, "owner" "Eve", "credits" 100}])
然後選擇
(client ["select" "accounts" {"where" ["=" "id" 1]}])
過去3年沒有提交,看起來像.org域擁有新的所有權。 https://github.com/mmcgrana/fleetdb – Joanis 2014-05-04 01:33:48
+1,這樣希望您可以開始使用更多的鏈接不久的某個時候:-) – mikera 2011-01-09 17:53:41