Almacenar imágenes en base de datos ¿Porqué no?
Se me ocurría esta mañana mientras iba en el autobus, sin razón aparente.
Guardando las imágenes necesarias para la web en el disco, has de estar pendiente de borrar la anterior cuando pones una nueva, de borrar las que están en uso cuando se borra un registro, de copiarlas del entorno de producción al de publicación cuando se publica la base de datos, etc.
Todo por evitar que cuando se solicite una imagen, sea necesario hacer una consulta más a la base de datos … porque espacio, lo que se dice espacio, no creo que ocupen mucho más en un sitio que en otro, salvo que afecte exageradamente al registro de transacciones y movidas varias, pero todo esto depende del motor de base de datos que uses.
En HSQLDB ocuparían el doble exacto, porque cada byte se almacena en formato hexadecimal (texto, osea dos bytes), pero en otros motores …
¿Qué opinais?

Pues yo veo dos problemas con esto:
-Que muchas bbdd no están bien optimizadas para guardar objetos binarios grandes (claro que la mayoría de imágenes que forman un sitio web no son excesivamente grandes).
-Que los servidores web (IIS, Apache) utilizan técnicas de negociación de cache con el cliente que hace que estas imágenes no se vuelvan a pedir al servidor en conexiones subsiguientes. Si sirves las imágenes desde la bbdd con un php/aspx/jsp debes reimplementar estas técnicas o notarás la bajada de rendimiento.
Un saludo.
Juanjo Navarro el May 22nd, 2007 a las 9:49 am
¿De veras piensas eso cuando vas por las mañanas en el bus? WOW!!
Mario el May 22nd, 2007 a las 12:35 pm
Es buena razón, en realidad las molestias de las que hablo no son tan molestas, … solo divagaba.
En realidad, serían solo imágenes de productos, o noticias, es decir, imagenes fichas que en principio solo se visualizan una vez por usuario, salvo quizás las del listado previo, claro, no sé … un poco jaleo, sí.
Sea el tipo de archivo que sea, en principio, si ya está en caché y las cabeceras no muestran indicios de cambio, este no debería solicitarse, no o qué? ummm … habrán casos y casos.
Mario, a ver si comienzas a firmar con la nueva URL.
albinworld el May 22nd, 2007 a las 3:58 pm
A veces lo he pensado, pero tras meditarlo un rato he llegado a la conclusión de que no ahorras una llamada a base de datos sino que la añades. Cuanto menos se use la base de datos mejor, ya que está optimizada para hacer consultas precisas y rapidas en las que pueden ser necesarias reordenaciones y otros procedimientos.
A mi juicio, siempre que se pueda descargar la base de datos de cosas externas mejor, ya que al fin y al cabo, la base de datos acaba siendo siempre el cuello de botella. Mucha gente guarda datos binarios en base de datos y asi no debe mantener unos datos en el sistema de ficheros aparte de la propia base de datos. Lo veo cómodo pero no realista en cuanto a rendimiento (sobre todo si tienes en cuenta que alojas varios portales en una misma máquina).
Aun así, son opiniones personales y formas de hacer las cosas. Lo mejor es probar las dos formas, pegarse la leche en rendimiento y acabar eligiendo la mejor.
Saludos.
compuglobal el May 22nd, 2007 a las 8:09 pm
En serio, a veces me pongo a escribir un post, y pienso, vaya tontería voy a decir … esta mañana ya he advertido que ha sido un pensamiento inpulsivo, jeje …
Bueno, puede haber alguna ocasión en que merezca la pena, quizás si vas a hacer un CD distribuible, que no hay problema de rendimiento, y puedes encriptar ¿más cómodamente? tooodos los contenidos.
Pero en general, esta claro que estaba demasiado sobao en el bus.
Me alegro verte por aquí, compugloba.
albinworld el May 22nd, 2007 a las 9:11 pm
[…] Mis movidas Mis inquietudes, mis tormentos y mis placeres. « Almacenar imágenes en base de datos ¿Porqué no? […]
Mis movidas » Blog Archive » Consideraciones sobre Amazon S3 el May 23rd, 2007 a las 12:11 pm