Der offensichtliche Weg besteht darin, die JDBC-Unterstützung von Clojure Contrib zu laden und eine Funktion zu schreiben, um eine map / struct in eine Tabelle zu übersetzen. Ein Nachteil davon ist, dass es nicht sehr flexibel ist; Änderungen an Ihrer Struktur erfordern DDL-Änderungen. Dies bedeutet entweder das Schreiben von DDL-Generierung (zäh) oder das manuelle Codieren von Migrationen (langweilig).
Welche Alternativen gibt es? Die Antworten müssen ACID sein, das Serialisieren in eine Datei usw. ausschließen.
Eine Option für das Fortsetzen von Karten in Clojure, die immer noch eine Relation-Datenbank verwendet, besteht darin, die Kartendaten in einem undurchsichtigen Blob zu speichern. Wenn Sie nach Datensätzen suchen möchten, können Sie Indizes in separaten Tabellen speichern. Zum Beispiel können Sie lesen, wie FriendFeed schemalose Daten über MySQL speichert - Ссылка
Eine weitere Option ist die Verwendung des Entity-Attribut-Value-Modells (EAV) zum Speichern von Daten in einer Datenbank. Sie können mehr über EAV auf Wikipedia lesen (Ich würde einen Link posten, aber ich bin ein neuer Benutzer und kann nur einen Link veröffentlichen).
Eine weitere Option ist die Verwendung von BerkeleyDB für Java - eine native Java-Lösung, die ACID und Sperren auf Datensatzebene bietet. (Gleiches Problem beim Posten eines Links).
Clj-record ist eine Implementierung von active record in clojure, die für Sie von Interesse sein könnte.
Sie könnten eine der Java-basierten Graph-Datenbanken ausprobieren, zum Beispiel Neo4J . Es könnte einfach sein, eine Hashmapp-Schnittstelle zu codieren, um sie einigermaßen transparent zu machen.
MongoDB und sein Framework congomongo (lein: [congomongo "0.1.3-SNAPSHOT"]) funktionieren für mich. Es ist unglaublich nett mit den schemalosen Datenbanken, und mit Congomongo ist es recht einfach, damit klarzukommen. MongoDB fügt ein _id-Feld in jedes Dokument ein, um es zu identifizieren, und es gibt eine ziemlich gute Transparenz zwischen clojure-maps und mongo-maps.
Tags und Links persistence clojure