Estoy construyendo una aplicación asp.net mvc donde los usuarios pueden adjuntar una imagen a su perfil, pero también en otras áreas del sistema como un gadget de mensajes en el tablero que muestra mensajes recientes, etc.¿Almacenar imágenes de perfil de usuario en el disco o en la base de datos?
Cuando el usuario carga estos Me pregunto si sería mejor almacenarlos en la base de datos o en el disco.
ventajas Databse
fácil de base de datos completa de copia de seguridad y mantener el contenido de perfil/imágenes con mesas de perfil/usuario asociados
cuando construyo servicios web más adelante por la pista, que sólo puede extraiga todos los datos relacionados profiles de un solo lugar (la base de datos)
Sistema de Archivos ventajas
la carga de archivos desde el disco es probablemente más rápido
alguna otra ventaja?
Donde otros sitios almacenan este tipo de información. ¿Tengo razón en estar un poco preocupado por el rendimiento de la base de datos por algo como esto?
¿Tal vez habría una manera de almacenar en caché las imágenes extraídas de la base de datos durante un período de tiempo?
Como alternativa, ¿qué ocurre con la idea de almacenar estas imágenes en la base de datos, pero copiarlas en el disco para que el servidor web pueda cargarlas desde allí? Esto parecería dar tanto la copia de seguridad como la conveniencia de un Db, al tiempo que proporciona las ventajas de velocidad de los archivos en el disco.
infraestructura en cuestión
- La página web será desplegado para IIS en Windows 2003 Server que ejecuta el sistema de archivos NTFS.
- La base de datos será de SQL Server 2008
Resumen
lectura en torno a una gran cantidad de temas relacionados aquí en SO, muchas personas están en tendencia hacia el tipo de SQL Server Filestream. Sin embargo, por lo que pude deducir (puedo estar equivocado), no hay mucho beneficio cuando los archivos son bastante pequeños. Sin embargo, la distribución de archivos parece mejorar enormemente el rendimiento cuando los archivos tienen múltiples MB o más.
Como mis fotos de perfil tienden a estar alrededor de ~ 5kb, decidí dejarlas almacenadas en un almacén de archivos en la base de datos como varbinary (max).
En ASP.NET MVC vi un problema de rendimiento al devolver FileContentResults por imágenes extraídas de la base de datos de esta manera. Así que terminé el almacenamiento en caché del archivo en el disco cuando se lee si la ubicación de este archivo no se encuentra en la caché de mi aplicación.
Así que supongo que opté por un híbrido;
- de almacenamiento de base de datos para la cocción de los datos más fáciles y los archivos están vinculados directamente a los perfiles
- Sombra copia en el disco para permitir un mejor almacenamiento en caché
En cualquier momento puedo eliminar la carpeta de caché en el disco , y a medida que se vuelven a solicitar las imágenes, se volverán a copiar en el primer golpe y se servirán desde el caché que se encuentra allí después.
Debe leer esto: http://stackoverflow.com/questions/3748/storing-images-in-db-yea-or-nay – Anders
Lo siento, hay algunos errores tipográficos con mi pregunta. Escribiendo esto desde mi iPhone. Editaré cuando llegue a una pc. –
Gracias anders, eso era exactamente lo que estaba buscando. Muchas vistas y opiniones en ese hilo que vinculó. –