Pregunta

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

Estoy comenzando a escribir una nueva aplicación web y el back-end proporcionará alrededor de 1-10 millones de imágenes . (tamaño medio 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 bajos 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á muy apreciada :)

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

¿Fue útil?

Solución

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

Deje el almacenamiento en caché del archivo en el sistema operativo y / o su proxy inverso: serán mejores en eso.

Otros consejos

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.
  • Volcar 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 publicar una imagen, simplemente el viejo IIS / Apache.
  • Puede escalar más rápido con servidores web muy baratos, o potencialmente a 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 del "real" datos de la tabla en la memoria, que es donde obtiene la velocidad de su base de datos para consultas. Si utiliza su preciosa memoria para mantener en caché los archivos de imagen, eso no le ofrece casi nada de velocidad en comparación con tener más del índice de fotos en la memoria.

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

Consulte Almacene 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 arquitectura y no almacene documentos como archivos PDF e imágenes en la base de datos, eventualmente tendrá que refactorizarlos 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 base de datos. 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. En mi experiencia, y según lo que ha publicado en cuanto a la cantidad de imágenes y el tamaño de las imágenes, pagará un alto precio en el rendimiento de la base de datos si las almacena en la base de datos. Los almacenaría en el sistema de archivos.

¿Qué base de datos estás 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 para el almacenamiento BLOB, la configuración de Windows y SQL Server para usar los datos de FILESTREAM, las consideraciones para combinar FILESTREAM con otras características y los detalles de implementación, como la partición y el rendimiento.

detalles

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

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top