top surveys stackoverflow programming popular most languages development database clojure

database - programming - stackoverflow surveys



Usa una base de datos con Clojure (11)

¿Qué métodos para usar una base de datos de Clojure están ahí?

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?


Me gustaría agregar una respuesta de noviembre de 2011 por el bien de cualquiera que venga desde Google.

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


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.


Utilicé Berkeley DB para una base de datos clave / valor simple en Clojure. Mira aquí .


Hay ClojureQL que abarca el álgebra relacional.



Ahora (a finales de 2011) recomendaría Korma - "SQL sabroso para Clojure"

Es una hermosa pequeña DSL SQL, aquí hay un ejemplo del sitio web:

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


Si necesita conexiones y / o conexiones persistentes a múltiples bases de datos y no quiere restablecer las conexiones de vez en cuando, le recomendaría que use las agrupaciones de conexiones DB. Algo como BoneCP o Tomcat CP.

Puede suministrar DataSources desde esos paquetes a (clojure.contrib.sql / with-connection ...).


Si está abierto a usar una biblioteca Java pero quiere algo que abarque la simplicidad, quizás le guste Persist . Solo le llevará 10 minutos echarle un vistazo y ver si se ajusta a sus necesidades.


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


La última y mejor para 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 enunciados para que sean altamente optimizados, vea el hilo del grupo clojure "¿ Las mejores bibliotecas JDBC actuales? " Del 24 de febrero 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 from tabla, una cláusula de group-by y una cláusula de order-by definición de base qué deben considerarse dobles y en qué orden deben conservarse los registros. En combinación con los metadatos JDBC, la consulta se reescribe efectivamente para generar:

  • Una mesa de reemplazo temporal
  • Consultas para unificar índices únicos, para evitar conflictos cuando se actualizan referencias de claves extranjeras
  • Consultas para actualizar todas las referencias de clave externa
  • Eliminar declaraciones para eliminar todos los duplicados

Para crear el SQL mejor ejecutado, pero todavía independiente de la base de datos, 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.

...

Eso redujo SQL a (a veces) GB de script para alrededor de unas 100 líneas de SQL, y en una ocasión, un tiempo de ejecución de 19 horas a 1.5 minutos ".

Yesql , por otro lado, apunta a la simplicidad total. Define algunas funciones para cargar archivos .sql parametrizados.

Su página web menciona los siguientes "PSU":

  • 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 de 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 fácil. ¿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.