2009-06-15 9 views
7

La forma obvia es cargar el soporte JDBC de Clojure Contrib y escribir alguna función para traducir un mapa/estructura a una tabla. Una desventaja de esto es que no es muy flexible; los cambios en su estructura requerirán cambios de DDL. Esto implica escribir generación DDL (difícil) o migraciones de codificación manual (aburrido).¿Cuál es la forma más fácil de conservar mapas/estructuras en Clojure?

¿Qué alternativas existen? Las respuestas deben ser ACID, descartar la serialización en un archivo, etc.

Respuesta

5

El uso de lib-client lib de CouchDB y clojure.contrib.json.read/write me funciona bastante bien. Sin embargo, las garantías de consistencia de CouchDB pueden no ser lo suficientemente fuertes para sus propósitos.

2

Clj-record es una implementación de registro activo en clojure que puede ser de su interés.

7

Una opción para los mapas persistentes en Clojure que todavía utiliza una base de datos de relaciones es almacenar los datos del mapa en un blob opaco. Si necesita la capacidad de buscar registros, puede almacenar índices en tablas separadas. Por ejemplo, puede leer cómo FriendFeed almacena datos sin esquema en la parte superior de MySQL - http://bret.appspot.com/entry/how-friendfeed-uses-mysql

Otra opción es usar el modelo Entity-Attribute-Value (EAV) para almacenar datos en una base de datos. Puedes leer más sobre EAV en Wikipedia (publicaría un enlace, pero soy un usuario nuevo y solo puedo publicar un enlace).

Otra opción más es utilizar BerkeleyDB para Java: es una solución nativa de Java que proporciona ACID y bloqueo de nivel de grabación. (Mismo problema al publicar un enlace).

+1

+1 por lo que se espera poder comenzar a utilizar más enlaces en algún momento pronto :-) – mikera

2

Puede probar una de las bases de datos de gráficos basadas en Java, como Neo4J. Puede ser fácil codificar una interfaz hashmap para que sea razonablemente transparente.

+0

Hay algunas personas que utilizan Neo4j con Clojure, tienen un vistazo aquí para las diferentes implementaciones de contenedor: http://wiki.neo4j.org/content/Clojure – nawroth

1

MongoDB y su framework congomongo (lein: [congomongo "0.1.3-SNAPSHOT"]) funciona para mí. Es increíble agradable con las bases de datos sin esquema, y ​​congomongo es bastante fácil de entender. MongoDB agrega un _id-field en cada documento para mantenerlo identificado, y hay bastante buena transparencia entre clojure-maps y mongo-maps.

https://github.com/somnium/congomongo

9

FleetDB es una base de datos implementada en Clojure. Tiene una sintaxis muy natural para trabajar con mapas/estructuras, p. insertar:

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

A continuación, seleccione

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

http://fleetdb.org/

+1

Sin compromiso en los últimos 3 años, y parece que el dominio .org tiene nueva propiedad. https://github.com/mmcgrana/fleetdb – Joanis

Cuestiones relacionadas