Almacenamiento de imágenes

Estimados amigos, quisiera conocer vuestra opinión (más experta que la mia), respecto a si conviene más almacenar las imágenes en la base de datos usando datos de tipo bytea, o guardar solo un enlace a un archivo de imágen almacenado en una carpeta creada a tal efecto.

Me refiero a imágenes fotográficas relacionadas con la información de la tabla.

Un coridal saludo.

Básicamente hay tres formas distintas de almacenar/relacionar imágenes (o cualquier otro tipo de archivo):

  1. Guardando solamente el path del archivo. Este metodo no tiene ninguna relacion con la base de datos, es decir, solo se almacena un string con la ruta del archivo.

  2. Large Object que almacena una referencia a la imagen. El campo se debe definir del tipo OID y se utilizan diferentes funciones para manejar los archivos (lo_import, lo_export, lo_unlink). Si bien se pueden dar permisos de acceso sobre esta columna, todo dependerá también de los permisos del sistema operativo. Tampoco se puede asegurar la integridad de los datos, ya que si un archivo es eliminado del filesystem la base quedara apuntando a algo que no existe.

  3. Definir un campo del tipo bytea y almacenar el archivo dentro de la base de datos. Esto tiene la ventaja de poder administrar dicha imagen como cualquier otro dato que tengas dentro de la base. Dándole permisos, backups junto a los datos, independizar del S.O, integridad, y todos los beneficios que representa una base de datos. Como contra: si ya estabas utilizando los archivos para otra aplicación duplicarías tanto en tamaña y esfuerzos de mantenimiento.

Generalmente en Postgresql se utiliza la técnica 2 ó 3 luego de evaluar los pro y contras. Si utilizas la 3, tene en cuenta el volumen en que se incrementara la base de datos, si el disco tiene espacio para esto y seria interesante analizar la creación de un tablespaces para alojar la tabla que contenga las imágenes.

saludos,
Nico.

Gracias Nico, un cordial saludo.