Almacenamiento de imágenes: base de datos o sistema de archivos –

Leí una publicación al respecto, pero todavía no entiendo cuál es la mejor solución en mi caso.

Empiezo a escribir una nueva aplicación web y el backend proporcionará entre 1 y 10 millones de imágenes . (tamaño promedio 200-500kB para una sola imagen)

Mi sitio proporcionará contenido e imágenes a 100-1000 usuarios al mismo tiempo.

También me gustaría mantener los costos del proveedor lo más bajo posible (pero este es un requisito secundario). Estoy pensando que el espacio del sistema de archivos es menos costoso si se compara con el costo del tamaño de la base de datos.

Personalmente, me gusta la idea de tener todas mis imágenes en la base de datos, pero cualquier sugerencia será realmente apreciada 🙂

¿Crees que en mi caso el enfoque DB es la elección correcta?

Poner todas esas imágenes en su base de datos lo hará muy, muy grande. Esto significa que su motor de DB estará ocupado guardando en caché todas esas imágenes (una tarea para la que no está realmente diseñado) cuando podría almacenar en caché datos de aplicaciones en caliente.

Deje el almacenamiento en caché del archivo en el sistema operativo y / o su proxy inverso; lo harán mejor.

Algunas otras razones para almacenar imágenes en el sistema de archivos:

  • Los servidores de imágenes pueden ejecutarse incluso cuando la base de datos está ocupada o inactiva.
  • Los sistemas de archivos están hechos para almacenar archivos y son bastante eficientes en eso.
  • Descargar datos en su base de datos significa copias de seguridad más lentas y otras operaciones.
  • No se necesita un código del lado del servidor para mostrar una imagen, simplemente el antiguo IIS / Apache.
  • Puede escalar más rápido con servidores web baratos o, potencialmente, con un CDN.
  • Puede realizar trabajos relacionados (generar miniaturas, etc.) sin involucrar a la base de datos.
  • Su servidor de base de datos puede mantener más de la tabla “real” de datos en la memoria, que es donde obtiene la velocidad de su base de datos para las consultas. Si utiliza su preciosa memoria para mantener los archivos de imagen en la memoria caché, eso no le convencerá casi nada en relación con la velocidad en lugar de tener más índices de fotos en la memoria.

La mayoría de los sitios grandes usan el sistema de archivos.

Consulte Almacenar imágenes como archivos o en la base de datos para una aplicación web.

Al tratar con objetos binarios, siga un enfoque centrado en documentos para la architecture y no almacene documentos como archivos PDF e imágenes en la base de datos, eventualmente tendrá que volver a configurarlo cuando comience a ver todo tipo de problemas de rendimiento con su base de datos. Simplemente almacene el archivo en el sistema de archivos y tenga la ruta dentro de una tabla de su databse. También hay una limitación física en el tamaño del tipo de datos que usará para serializar y guardarlo en la base de datos. Simplemente almacénelo en el sistema de archivos y acceda a él.

Su primera oración dice que ha leído algunas publicaciones sobre el tema, por lo que no me molestaré en poner enlaces a artículos que cubran esto. Según mi experiencia, y en función de lo que haya publicado en cuanto a la cantidad de imágenes y tamaños de las imágenes, va a pagar caro en rendimiento de BD si las almacena en la base de datos. Los almacenaría en el sistema de archivos.

¿Qué base de datos estas usando? MS SQL Server 2008 proporciona almacenamiento FILESTREAM

permite el almacenamiento y el acceso eficiente a los datos BLOB utilizando una combinación de SQL Server 2008 y el sistema de archivos NTFS. Cubre las opciones de almacenamiento BLOB, la configuración de Windows y SQL Server para usar datos de FILESTREAM, las consideraciones para combinar FILESTREAM con otras características y los detalles de implementación, como la creación de particiones y el rendimiento.

detalles

Usamos FileNet, un servidor optimizado para imágenes. Es muy costoso. Una solución más barata es usar un servidor de archivos.

No considere almacenar archivos grandes en un servidor de base de datos.

Como otros han mencionado, almacene referencias a los archivos grandes en la base de datos.