Je construis une application mvc asp.net où les utilisateurs peuvent joindre une image à leur profil, mais aussi dans d'autres zones du système comme un gadget de messagerie sur le tableau de bord qui affiche les messages récents, etc.Enregistrer des images de profil utilisateur sur le disque ou dans la base de données?
Lorsque l'utilisateur télécharge ces je me demande s'il serait préférable de les stocker dans la base de données ou sur le disque.
avantages Databse
facile à base de données complète de sauvegarde et de maintenir le contenu du profil/images avec des tables profil/utilisateur associés
quand je construis des services Web plus tard sur la piste, ils peuvent tout simplement extraire toutes les données relatives à un point de la base (la base de données)
avantages Filesystem
fichiers de chargement à partir du disque est probablement plus rapide
d'autres avantages?
Où d'autres sites stockent ce type d'informations. Ai-je raison d'être un peu préoccupé par la performance de la base de données pour quelque chose comme ça?
Peut-être y aurait-il un moyen de mettre en cache les images extraites de la base de données pendant un certain temps? Sinon, qu'en est-il de l'idée de stocker ces images dans la base de données, mais de les copier en mode miroir afin que le serveur Web puisse les charger à partir de là? Cela semblerait donner à la fois la sauvegarde et la commodité d'un Db, tout en donnant les avantages de vitesse des fichiers sur le disque.
Infrastructure en question
- Le site sera déployé à IIS sur Windows Server 2003 exécutant le système de fichiers NTFS.
- La base de données sera SQL Server 2008
Résumé
autour de la lecture sur un grand nombre de sujets connexes ici sur le SO, beaucoup de gens sont maintenant une tendance vers le type SQL Server Filestream. De ce que j'ai pu rassembler cependant (je peux me tromper), il n'y a pas beaucoup d'avantages quand les fichiers sont assez petits. Filestreaming semble cependant grandement améliorer les performances lorsque les fichiers sont plusieurs Mo ou plus. Comme mes images de profil tendent à s'asseoir autour ~ 5kb j'ai décidé de les laisser simplement stockés dans un filestore dans la base de données comme varbinary (max).
Dans ASP.NET MVC, j'ai constaté un léger problème de performance renvoyant FileContentResults pour les images extraites de la base de données de cette manière. J'ai donc mis en cache le fichier sur le disque lorsqu'il est lu si l'emplacement de ce fichier n'est pas trouvé dans le cache de l'application.
Donc je suppose que je suis allé pour un hybride;
- stockage de base de données pour faire cuire jusqu'à des données plus faciles et les fichiers sont liés directement aux profils
- copie ombre sur le disque pour permettre une meilleure mise en cache
À tout moment, je peux supprimer le dossier de cache sur le disque et comme les images sont re-demandées, elles seront recopiées dès le premier hit et servies depuis le cache.
Vous devriez lire ceci: http://stackoverflow.com/questions/3748/storing-images-in-db-yea-or-nay – Anders
Désolé, il y a quelques fautes de frappe avec ma question. Taper ça depuis mon iPhone. Éditera quand j'arriverai à un PC. –
Merci anders, c'était exactement ce que je cherchais. Beaucoup de points de vue et d'opinions dans ce fil que vous avez lié. –