Mi pregunta es bastante genérica y sé que podría no haber una respuesta al 100%. Estoy creando una solución web ASP .NET que incluirá muchas imágenes y, con suerte, una buena cantidad de tráfico. Tengo muchas ganas de lograr el rendimiento.
¿Debo guardar las imágenes en la base de datos o en el sistema de archivos? Y sin importar la respuesta, estoy más interesado en por qué elegir una forma específica.
Muchas gracias Stefan
DUPLICAR : Almacenar imágenes en DB - ¿Sí o no? , ¿Cómo almacenar imágenes en su sistema de archivos , almacenando una pequeña cantidad de imágenes: blob o fs? y probablemente algunos otros.
COMENTARIO: Gracias por muchas buenas respuestas. Iré por una solución basada en archivos, incluso si me gusta la idea de tener una solución 100% basada en bases de datos. Parece que hoy existen buenas soluciones para hacer lo que quiero con las bases de datos, etc., pero tengo algunas razones para no hacerlo.
Estaré en una solución alojada, tengo una gran cantidad de almacenamiento (10 gb) pero solo 300mb para la base de datos. Costará mucho almacenamiento adicional en la base de datos.
No soy un experto en DB y tampoco controlo la configuración de la DB. Una solución basada en DB puede necesitar una configuración personalizada como parece.
Si nos movemos para ejecutar el sitio en nuestro propio servidor, podría considerar una solución basada en DB. gracias Stefan
fuente
Respuestas:
Almacene las imágenes en el sistema de archivos y las ubicaciones de las imágenes en la base de datos.
¿Por qué? Porque...
fuente
En mis proyectos desarrollados recientemente, almacené imágenes (y todo tipo de documentos binarios) como columnas de imágenes en tablas de bases de datos.
La ventaja de tener archivos almacenados en la base de datos es obviamente que no termina con archivos sin referencia en el disco duro si se elimina un registro, ya que la sincronización entre la base de datos (= metadatos) y el disco duro (= almacenamiento de archivos) no está integrada y tiene que ser programado manualmente.
Utilizando la tecnología actual, le sugiero que almacene imágenes en columnas FILESTREAM de SQL Server 2008 (al menos eso es lo que voy a hacer con mi próximo proyecto), ya que combinan la ventaja de almacenar datos en la base de datos Y tener grandes binarios en archivos separados (en menos según publicidad;))
fuente
El dicho siempre ha sido "Archivos en el sistema de archivos, metadatos de archivos en la base de datos"
fuente
Es mejor almacenar archivos como archivos. Diferentes bases de datos manejan los datos de Blob de manera diferente, por lo que si tiene que migrar su back-end podría tener problemas.
Cuando se sirven los impages, es probable que un <img src = a un archivo que ya existe en el servidor sea más rápido que crear un archivo temporal desde el campo de la base de datos y señalar la etiqueta <img a eso.
Encontré esta respuesta buscando en Google su pregunta y leyendo los comentarios en http://databases.aspfaq.com/database/should-i-store-images-in-the-database-or-the-filesystem.html
fuente
Por lo general, me gusta tener archivos binarios en la base de datos porque:
fuente
El almacenamiento de imágenes en la base de datos agrega una sobrecarga de la base de datos para servir imágenes individuales y dificulta la descarga al almacenamiento alternativo (S3, Akami) si creces a ese nivel. Almacenarlos en la base de datos hace que sea mucho más fácil mover su aplicación a un servidor diferente, ya que solo la base de datos necesita moverse ahora.
El almacenamiento de imágenes en el disco facilita la descarga al almacenamiento alternativo, hace que las imágenes sean elementos estáticos para que no tenga que meterse con los encabezados HTTP en su aplicación web para que las imágenes se puedan almacenar en caché. La desventaja es que si alguna vez mueves tu aplicación a un servidor diferente, también debes recordar mover las imágenes; algo que se olvida fácilmente
fuente
Para aplicaciones basadas en la web, obtendrá un mejor rendimiento al usar el sistema de archivos para almacenar sus imágenes. Hacerlo le permitirá implementar fácilmente el almacenamiento en caché de las imágenes en múltiples niveles dentro de su aplicación. Existen algunas ventajas para almacenar imágenes en una base de datos, pero la mayoría de las veces esas ventajas vienen con aplicaciones basadas en el cliente.
fuente
Solo para agregar un poco más a las respuestas ya buenas hasta ahora. Usted todavía puede obtener los beneficios del almacenamiento en caché tanto del nivel de web tal y el nivel de base de datos si vas a la ruta que mantener las imágenes en la base de datos.
Creo que para la base de datos puede lograr esto mediante la forma en que almacena las imágenes en relación con los datos textuales asociados con ellas y si puede acceder a las imágenes en una consulta particular para que la base de datos pueda almacenar en caché la consulta (aunque la teoría es así siéntete libre de bombardearme en esa parte).
Con el lado web, supongo que dado que su pregunta está etiquetada con asp.net, usaría un controlador http para mostrar las imágenes. Luego, tiene todos los beneficios del marco a su disposición y puede mantener su lógica de dominio más limpia con solo tener que pasar la clave de su imagen al controlador http.
fuente
¿Por qué no elegir una base de datos NoSql individual para almacenar sus archivos?
Le brinda integridad de datos, consistencia de datos como @chburd mencionó.
Mientras usted rdbms todavía se mantiene pequeño.
fuente
Eclipse
) de almacenar imágenes en el sistema de archivos y mantener sus metadatos en DB - http://www.devmanuals.com/tutorials/java/spring/spring3/mvc /Spring3MVCImageUpload.htmlfuente