2008-11-17 18 views
38

¿Qué métodos utiliza una base de datos de Clojure?Use una base de datos con Clojure

Sé por Clojure que puedes hacer todo lo que puedas con Java, pero eso significa que puedo terminar usando algo demasiado complicado (como Hibernate) que choca con la simplicidad de Clojure. ¿Alguna recomendación o comentario?

Respuesta

18

clojure-contrib tiene una biblioteca sql que es una envoltura delgada alrededor de JDBC (java.sql.DriverManager). El archivo de prueba que viene con él tiene algunos ejemplos de su uso.

+0

clojure-contrib se ha mudado. Está aquí ahora: http://code.google.com/p/clojure-contrib/ –

+6

En realidad, se movió dos veces desde que publiqué esto. Ahora está aquí: http://github.com/richhickey/clojure-contrib :) –

+0

debería mirar clojure ql también. – nickik

8

Si usted está abierto a la utilización de una biblioteca de Java, pero quiere algo que abraza la simplicidad, quizás te va a gustar Persist. Solo le llevará 10 minutos echarle un vistazo y ver si se ajusta a sus necesidades.

5

He usado Berkeley DB por una simple base de datos clave/valor en Clojure. Ver here.

1

Si necesita conexiones y/o conexiones persistentes a múltiples bases de datos y no desea restablecer las conexiones de vez en cuando me recomendaría el uso de conjuntos de conexiones DB. Algo como BoneCP o Tomcat CP.

Puede suministrar DataSources de esos paquetes a (clojure.contrib.sql/con conexión ...).

+0

hola @jartur, su enlace es un 404. – kristianlm

+0

@kristianlm Eliminado. – jartur

4

Hay ClojureQL que abarca el álgebra relacional.

14

quisiera ahora (a partir de finales de 2011) recomiendan Korma - "SQL sabroso por Clojure"

Es un hermoso pequeño DSL SQL, he aquí un ejemplo de el sitio web:

(select users 
    (aggregate (count :*) :cnt) 
    (where (or (> :visits 20) 
      (< :last_login a-year-ago)))) 
+2

Korma parece estar abandonado: https://groups.google.com/d/msg/clojure/SgqL_zDvPdw/ZJtfvEucJQYJ – claj

8

me gustaría añadir una respuesta tan-de-Nov-2011 por el bien de cualquiera que viene aquí desde Google.

La biblioteca central de acceso SQL actual en Clojure 1.3 es clojure.java.jdbc. Hay algunas bibliotecas muy buenas construidas encima de esto como ClojureQL y Korma.

4

Hoy en día existen Datomic y muchas soluciones similares, como DataScript, para capacidades de base de datos relacionales (¡no sql!) Muy interesantes.

8

El mejor y más nuevo de bases de datos SQL parece ser HoneySQL y Yesql.

HoneySQL es una DSL bastante elegante para generar consultas SQL. Hay rumores de que incluso puede modificar los estados a ser altamente optimizados, consulte el hilo clojure-grupo "Current best-of-breed JDBC libraries?" desde el 24 de Feb de 2015.

Niels van Klaveren dice en el hilo antes mencionado:

"Básicamente, [HoneySQL] genera secuencias de comandos SQL para volver a vincular referencias de claves externas para limpiar duplicados en una base de datos. Se necesita una consulta de selección de honeysql con (al menos) una tabla from, una group-by y una cláusula order-by como una definición básica. dobla, y en que orden se deben preservar los registros.En combinación con JDBC metadatos esa consulta efectivamente obtiene reescrito para generar:

  • un reemplazo temporal tabla
  • consultas para unificar índices únicos, para evitar enfrentamientos cuando las referencias de clave externa se actualizan
  • de consultas para actualizar toda la clave externa referencias
  • declaraciones eliminar para eliminar todos los duplicados

para crear el mejor rendimiento, pero aún base de datos SQL independiente, tuve que extender honeysql con cláusulas adicionales como OVER y PARTITION BY. No diría que fue muy fácil, pero pareció funcionar muy bien.

...

que reducen SQL para (a veces) de GB de secuencia de comandos para alrededor de unos 100 líneas de SQL, y en una ocasión, un tiempo de ejecución de 19 horas a 1,5 minutos."

Yesql, por el contrario, el objetivo de la simplicidad total de él se definen algunas funciones para cargar con parámetros .sql -limas

es página web menciona lo siguiente "proveedores del servicio universal":..

  • Sin sorpresas sintácticas. Su base de datos no se apega al estándar SQL, ninguno lo hace, pero a Yesql no le importa. Nunca perderás tiempo buscando "la sintaxis sexp equivalente". Nunca necesitará recurrir a una función (raw-sql "some('funky'::SYNTAX)").
  • Mejor soporte para el editor. Su editor probablemente ya tenga un gran soporte SQL. Al mantener SQL como SQL, puede usarlo.
  • Interoperabilidad del equipo. Sus DBA pueden leer y escribir el SQL que usa en su proyecto Clojure.
  • Ajuste de rendimiento más sencillo. ¿Necesitas EXPLICAR ese plan de consulta? Es mucho más fácil cuando su consulta es SQL ordinario.
  • Reutilización de consultas. Coloque los mismos archivos SQL en otros proyectos, porque son simplemente ol 'SQL. Compártalos como un submódulo.
Cuestiones relacionadas