images python postgresql storage photos photo-management

python - images - almacenamiento de fotos y documentos cargados-sistema de archivos frente a blob de base de datos



postgresql images (6)

Mi situación específica

Sitio web de administración de propiedades donde los usuarios pueden cargar fotos y alquilar documentos. Para cada unidad de apartamento, puede haber 4 fotos, por lo que no habrá una cantidad abrumadora de fotos en el sistema.

Para las fotos, habrá miniaturas de cada una.

Mi pregunta

Mi prioridad número 1 es el rendimiento. Para el usuario final, quiero cargar páginas y mostrar la imagen lo más rápido posible.

¿Debo almacenar las imágenes dentro de la base de datos, o el sistema de archivos, o no importa? ¿Debo guardar algo en el caché?

¡Gracias por adelantado!


Definitivamente almacena tus imágenes en el sistema de archivos. Una preocupación que la gente no considera suficiente cuando se considera este tipo de cosas es hinchazón; incorporar imágenes como blobs binarios en su base de datos es una forma realmente rápida de aumentar la velocidad de su base de datos. Con una gran base de datos se necesitan mayores requisitos de hardware, requisitos más difíciles para la replicación y copia de seguridad, etc. Si se adhieren las imágenes a un sistema de archivos, se pueden hacer copias de seguridad o replicarlas con muchas herramientas existentes de forma fácil y sencilla. El espacio de almacenamiento es mucho más fácil de aumentar en el sistema de archivos que en la base de datos, también.


Si bien hay excepciones para todo, el caso general es que el almacenamiento de imágenes en el sistema de archivos es su mejor opción. Puede proporcionar fácilmente servicios de almacenamiento en caché a las imágenes, no necesita preocuparse por el código adicional para manejar el procesamiento de imágenes, y puede hacer mantenimiento fácilmente en las imágenes si es necesario a través de los métodos de edición de imágenes estándar.

Parece que su modelo de negocio se adapta muy bien a este escenario.


Sistema de archivos. No contestar. Los datos tienen que atravesar muchas más capas cuando lo almacena en el db.

Editar en el almacenamiento en caché: si desea almacenar en caché el archivo mientras el usuario lo carga para asegurarse de que la operación finaliza lo antes posible, volcarlo directamente al disco (es decir, el sistema de archivos) es lo más rápido posible. Siempre que los archivos no sean demasiado grandes y no tenga demasiados usuarios simultáneos, puede "almacenar en caché" el archivo en la memoria, devolverlo al usuario y luego guardarlo en el disco. Para ser honesto, no me molestaría.

Si está haciendo que los archivos estén disponibles en la web después de que se hayan cargado y desee almacenar en caché para mejorar el rendimiento, el sistema de archivos sigue siendo la mejor opción. Obtendrá el almacenamiento en caché de forma gratuita (puede tener que ajustar una configuración o dos) desde su servidor web. No obtendrás esto si los archivos están en la base de datos.

Después de todo, parece que nunca debería almacenar archivos en la base de datos. No es el caso, solo necesitas una buena razón para hacerlo.


Tal vez en una ligera tangente, pero en este video de la Conferencia MySQL, el presentador habla sobre cómo el sitio web smugmug utiliza MySQL y varias otras tecnologías para un rendimiento superior. Creo que el video se basa en algunas de las respuestas publicadas aquí, pero también sugiere formas de mejorar el rendimiento del sitio web fuera del alcance del DB.


una base de datos puede ser más rápida que un sistema de archivos en algunas operaciones, pero cargar una porción bien identificada de cientos de KB no es una de ellas.

además, un buen servidor web frontend (como nginx) es mucho más rápido que cualquier capa de webapp que tendrías que escribir para leer el blob del DB. en algunas pruebas, nginx está a la par de memcached para la presentación de datos brutos de archivos de tamaño mediano (como grandes HTML o imágenes de tamaño mediano).

ir FS. no contestar.


Comenta a la respuesta de Sheepy.

En el almacenamiento común de archivos en SQL es mejor cuando el tamaño del archivo es inferior a 256 kilobytes, y vale cuando es mayor de 1 megabyte. Entonces, entre 256-1024 kilobytes depende de varios factores. Lea esto para obtener más información sobre las razones para usar SQL o sistemas de archivos.