sql >> Base de Datos >  >> RDS >> PostgreSQL

Almacenamiento de imágenes en PostgreSQL

Actualizando a 2012, cuando vemos que los tamaños de imagen y la cantidad de imágenes están creciendo y creciendo, en todas las aplicaciones...

Necesitamos alguna distinción entre "imagen original" e "imagen procesada", como miniatura.

Como dice la respuesta de Jcoby, hay dos opciones, entonces recomiendo:

  • usar mancha (Objeto grande binario):para almacenar imágenes originales, en su mesa. Consulte la respuesta de Ivan (¡no hay problema con la copia de seguridad de blobs!), Módulos adicionales suministrados de PostgreSQL, procedimientos, etc.

  • use una base de datos separada con DBlink:para el almacén de imágenes originales, en otra base de datos (unificada/especializada). En este caso, prefiero bytea , pero mancha está cerca de lo mismo. La separación de la base de datos es la mejor manera para un "servicio web de imagen unificado".

  • usar bytea (BYTE Array):para almacenar en caché imágenes en miniatura. Guarde en caché las pequeñas imágenes para enviarlas rápidamente al navegador web (para evitar problemas de representación) y reducir el procesamiento del servidor. Caché también metadatos esenciales, como ancho y alto. El almacenamiento en caché de la base de datos es la forma más fácil, pero verifique sus necesidades y las configuraciones del servidor (por ejemplo, módulos Apache):almacenar miniaturas en el sistema de archivos puede ser mejor, compare el rendimiento. Recuerde que es un servicio web (unificado), luego se puede almacenar en una base de datos separada (sin copias de seguridad), sirviendo muchas tablas. Consulte también el manual de tipos de datos binarios de PostgreSQL, pruebas con columna bytea, etc.

NOTA 1:hoy en día, el uso de "soluciones duales" (base de datos + sistema de archivos) está en desuso (!). Hay muchas ventajas al usar "solo base de datos" en lugar de dual. PostgreSQL tiene un rendimiento comparable y buenas herramientas para exportar/importar/entrar/salir.

NOTA2:recuerda que PostgreSQL solo tiene bytea , no tiene un BLOB predeterminado de Oracle :"El estándar SQL define (...) BLOB. El formato de entrada es diferente de bytea, pero las funciones y los operadores proporcionados son en su mayoría los mismos", Manual.

EDITAR 2014 :No he cambiado el texto original anterior hoy (mi respuesta fue el 22 de abril de 2012, ahora con 14 votos), Abro la respuesta para sus cambios (ver "Modo Wiki", ¡puedes editar!), para revisión y para actualizaciones .
La pregunta es estable (@Ivans's '08 answer con 19 votos), por favor ayuda a mejorar este texto.