Imágenes de usuario: base de datos frente al almacenamiento del sistema de archivos

Estoy escribiendo una función de carga en .NET para imágenes de presentación en perfiles de usuario. Estoy eligiendo entre dos formas diferentes de hacerlo, y me gustaría pedir consejo y opiniones sobre los pros y los contras.

  1. Almacene las imágenes directamente en el sistema de archivos

  2. Almacenar las imágenes en la base de datos

Hasta ahora, he sido principalmente la primera opción: nombrar las imágenes después de los nombres de usuario, ya que cada usuario solo puede tener una imagen de presentación. Luego hago una comprobación en la ruta designada si el usuario tiene una imagen, si no muestra una imagen predeterminada “sin imagen”.

Otra cosa que me gusta de esto es que ahorra espacio en la base de datos: la base de datos será bastante pesada sin la carga binaria adicional.

Estoy seguro de que hay otros aspectos en los que no he pensado, por lo que me gustaría escuchar sus opiniones al respecto. Si alguien tiene una solución radicalmente diferente al problema, ¡por favor comparte eso también!

Su pregunta ha sido respondida anteriormente en StackOverflow:

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

¡Incluyendo muchas otras preguntas duplicadas!

En general, es mejor almacenar archivos en el sistema de archivos. Los sistemas de archivos ya están sintonizados para almacenar archivos. Sin embargo, esto tiene sus desventajas, particularmente en términos de gestión, copia de seguridad, restauración, y es un empate bastante endeble entre un campo de ruta de archivo varchar en la base de datos y un archivo en el sistema de archivos. ¿Qué sistema de base de datos estás usando? Creo que si está usando SQL Server 2008, el nuevo tipo de FileStream ofrece un método muy bueno para almacenar archivos en esa base de datos.

Editar: Nota, realmente estoy hablando de manera más general sobre el almacenamiento de archivos en la base de datos. Existe una complejidad adicional involucrada al tratar de almacenar imágenes que pretende mostrar en páginas HTML en la base de datos.

El sistema de archivos es bueno, pero no es práctico con más de 3000 imágenes por carpeta. Es mejor escribir la creación automática de carpetas para cada 3000 bloques de imágenes.

redundencia de datos y dificultad de incoherencia en el acceso al aislamiento de datos de datos restricciones de integridad problema de atomicidad acceso concurrente y anomalías (problema de seguridad de actualización)

Para contenido fijo (no cambiante) como fotos, videos, etc., los sistemas de archivos no podrán escalar, especialmente si tienes muchos archivos en un directorio y el rendimiento realmente sufrirá. Una mejor opción es usar la tecnología de almacenamiento de objetos que almacena la imagen como un objeto y coloca los metadatos asociados en la base de datos automáticamente.

¿Qué tal si almacena archivos doc, pdf, xls, jpg? ¿Cuál recomendado?

Voy a trabajar en un sistema de gestión de documentos que podría almacenar 10000 archivos, pero el problema es que estoy muy preocupado por la propagación de virus si utilizamos la técnica del sistema de archivos.