"Es tentador, si la única herramienta que tiene es un martillo, tratar todo como si fuera un clavo". - Abraham MaslowProgramación funcional de la base de datos en Clojure
Necesito escribir una herramienta para volcar una gran base de datos jerárquica (SQL) a XML. La jerarquía consiste en una tabla Person
con las tablas subsidiarias Address
, Phone
, etc.
que tienen que volcar miles de filas, por lo que me gustaría hacerlo de forma incremental y no mantener a todo el archivo XML en la memoria.
Me gustaría aislar el código de función no pura en una pequeña parte de la aplicación.
Estoy pensando que esta podría ser una buena oportunidad para explorar FP y concurrencia en Clojure. También puedo mostrar los beneficios de la utilización de datos inmutables y multi-core a mis colegas escépticos.
No estoy seguro de cómo debería ser la arquitectura general de la aplicación. Estoy pensando que puedo usar una función impura para recuperar las filas de la base de datos y devolver una secuencia diferida que luego puede ser procesada por una función pura que devuelve un fragmento XML.
Para cada fila Person
, puedo crear un Future
y tener varios procesados en paralelo (el orden de salida no importa).
A medida que cada Person
se procesa, la tarea va a recuperar las filas correspondientes de la Address
, Phone
, etc. tablas y generar el XML anidada.
Puedo utilizar una función genérica para procesar la mayoría de las tablas, confiando en los metadatos de la base de datos para obtener la información de la columna, con funciones especiales para las pocas tablas que necesitan un procesamiento personalizado. Estas funciones se pueden enumerar en un map(table name -> function)
.
¿Estoy hablando de esto de la manera correcta? Puedo recurrir fácilmente a hacerlo en OO usando Java, pero eso no sería divertido.
BTW, ¿hay buenos libros sobre patrones FP o arquitectura? Tengo varios buenos libros sobre Clojure, Scala y F #, pero aunque cada uno cubre bien el lenguaje, ninguno mira la "gran imagen" del diseño de programación de funciones.
Que yo sepa, no existe un libro "FP para arquitectos". Sin embargo, si lee "Estructuras de datos puramente funcionales" de principio a fin, definitivamente tendrá una mejor idea de cómo aplicar los conceptos de PF en el mundo real. Ver http://www.amazon.com/Purely-Functional-Structures-Chris-Okasaki/dp/0521663504 –
@Chris Smith: Tengo esa en mi lista de deseos de Amazon. Lo comprobaré. – Ralph