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?

May 22nd, 2007 by admin

7 Responses to “Almacenar imágenes en base de datos ¿Porqué no?”

  1. 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.

  2. Mario says:

    ¿De veras piensas eso cuando vas por las mañanas en el bus? WOW!!

  3. albinworld says:

    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.

  4. compuglobal says:

    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.

  5. albinworld says:

    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.

  6. [...] Mis movidas Mis inquietudes, mis tormentos y mis placeres. « Almacenar imágenes en base de datos ¿Porqué no? [...]

  7. @ndrew says:

    me parece interesante tu preocupación, a mi modesto parecer creo que lo conveniente es almacenar los archivos en la base de datos, ya que tiene mayor seguridad, puedes hacer un dumb de la base de datos e incluso puedes controlar desde la base de datos el comportamiento de tus archivos, quienes los actualizan, suben y un mundo de cosas, claro que todo esto usando Postgres o un buen DBMS.
    Hay un artículo muy interesante que trata sobre esto:
    http://research.microsoft.com/research/pubs/view.aspx?msr_tr_id=MSR-TR-2006-45
    sería bueno que lo veas.
    Saludos, Adios.

Leave a Reply