2009-06-15 10 views
7

Oczywistym sposobem jest załadowanie wsparcia JDBC z Clojure Contrib i napisanie funkcji do translacji mapy/struktury do tabeli. Wadą tego jest to, że nie jest zbyt elastyczny; zmiany w strukturze będą wymagać zmian DDL. Sugeruje to pisanie DDL (trudne) lub migracje ręczne (nudne).Jaki jest najprostszy sposób na utrzymanie map/struktur w Clojure?

Jakie alternatywy istnieją? Odpowiedzi muszą być: ACID, wykluczanie serializowania do pliku, itp.

Odpowiedz

5

Korzystanie z klienta Java CouchDB i clojure.contrib.json.read/write działa całkiem dobrze dla mnie. Gwarancje spójności w CouchDB mogą nie być wystarczająco mocne dla twoich celów.

2

Clj-record jest implementacją aktywnego zapisu w clojure, które mogą Cię zainteresować.

7

Jedną z opcji utrzymywania map w Clojure, która wciąż używa bazy danych relacji, jest przechowywanie danych mapy w nieprzezroczystym obszarze typu blob. Jeśli potrzebujesz możliwości wyszukiwania rekordów, możesz przechowywać indeksy w osobnych tabelach. Na przykład możesz przeczytać, w jaki sposób program FriendFeed przechowuje niepoprawne dane na MySQL-http://bret.appspot.com/entry/how-friendfeed-uses-mysql

Inną opcją jest użycie modelu wartości encji jednostki (EAV) do przechowywania danych w bazie danych. Możesz przeczytać więcej o EAV na Wikipedii (zamieściłbym link, ale jestem nowym użytkownikiem i mogę opublikować tylko jeden link).

Kolejną opcją jest użycie BerkeleyDB dla Java - to natywne rozwiązanie Java zapewniające ACID i blokowanie rekordów. (Ten sam problem z publikowaniem linku).

+1

+1 więc mam nadzieję, że można zacząć używać więcej linków niedługo :-) – mikera

2

Można wypróbować jedną z baz danych opartych na Java, takich jak Neo4J. Kodowanie interfejsu hashmap może być łatwe, aby było rozsądnie przejrzyste.

+0

Istnieją pewne osoby korzystające Neo4j z Clojure, mają Spójrz tutaj na różne implementacje wrapperów: http://wiki.neo4j.org/content/Clojure – nawroth

1

MongoDB i jego framework congomongo (lein: [congomongo "0.1.3-SNAPSHOT"]) działa dla mnie. To niewiarygodne z bazalistycznymi bazami danych, a congomongo jest dość łatwe do pogodzenia. MongoDB dodaje _id-field w każdym dokumencie, aby go zidentyfikować, i jest dość dobra przejrzystość między mapami clojure i mapami mongo.

https://github.com/somnium/congomongo

9

FleetDB to baza realizowane w Clojure. Ma bardzo naturalną składnię do pracy z mapami/strukturami, np. wstawić:

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

Następnie wybierz

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

http://fleetdb.org/

+1

Brak zatwierdzenia w ciągu ostatnich 3 lat i wygląda na to, że domena .org ma nowe prawa własności. https://github.com/mmcgrana/fleetdb – Joanis