Stocker des images sous forme de fichiers ou dans la base de données pour une application web?

ma question est assez générale et je sais qu'il pourrait ne pas y avoir une réponse à 100%. Je suis en train de construire une solution Web ASP .NET qui inclura beaucoup de photos et avec un peu de chance une bonne quantité de trafic. Je ne veux vraiment atteindre la performance.

dois-je sauvegarder les images dans la base de données ou dans le système de fichiers? Et quelle que soit la réponse, je suis plus intéressé par la raison pour laquelle je choisis une voie spécifique.

Merci beaucoup, Stefan

DUPLIQUER : Stockage d'Images dans le DB - Oui ou Non? , Comment faire pour stocker des images dans votre système de fichiers , le Stockage d'un petit nombre d'images: blob ou fs? et probablement d'autres.


COMMENTAIRE: Merci pour les nombreuses bonnes réponses. J'opterai pour une solution basée sur les fichiers même si j'aime l'idée d'avoir une solution basée sur une base de données à 100%. Il semble qu'il y ait aujourd'hui de bons des solutions pour faire ce que je veux avec les bases de données, etc, mais j'ai quelques raisons de ne pas le faire.

  • je serai sur une solution hébergée, j'ai une énorme quantité de stockage(10 Go) mais seulement 300 Mo pour la base de données. Il coûtera beaucoup pour le stockage supplémentaire dans le DB.

  • Je ne suis pas un expert en freinage rhéostatique et je ne contrôle pas les réglages du freinage rhéostatique. Une solution basée sur la base de la base de données pourrait avoir besoin d'une configuration personnalisée telle qu'elle semble.

si nous allons passer à exécuter le site sur notre propre serveur, je pourrais envisager une solution basée DB. grâce, Stefan

114
demandé sur Community 2009-02-18 18:16:49

10 réponses

stocker les images sur le système de fichiers et les emplacements des images dans la base de données.

pourquoi? Parce...

  1. vous pourrez servir les photos comme des fichiers statiques.
  2. aucun accès à la base de données ou code d'application ne sera requis pour récupérer les images.
  3. les images peuvent être servies à partir d'un serveur différent pour améliorer les performances.
  4. il réduira la base de données étranglement.
  5. la base de données stocke finalement ses données dans le système de fichiers.
  6. Les Images
  7. peuvent être facilement mises en cache lorsqu'elles sont stockées sur le système de fichiers.
162
répondu Akbar ibrahim 2010-06-10 12:36:05

dans mes projets récemment développés, j'ai stocké des images (et toutes sortes de documents binaires) comme colonnes d'image dans les tables de base de données.

l'avantage d'avoir des fichiers stockés dans la base de données est évidemment que vous ne finissez pas avec des fichiers non référencés sur le disque dur si un enregistrement est supprimé, car la synchronisation entre la base de données (= meta data) et le disque dur (= file storage) n'est pas intégrée et doit être programmée manuellement.

en utilisant technologie, je vous suggère de stocker des images dans des colonnes SQL Server 2008 FILESTREAM (du moins c'est ce que je vais faire avec mon prochain projet), car ils combinent l'avantage de stocker des données dans la base de données et d'avoir de grands binaires dans des fichiers séparés (au moins selon la publicité;)

11
répondu devio 2009-02-18 15:21:34

l'adage a toujours été "les fichiers du système de fichiers, les métadonnées des fichiers de la base de données "

7
répondu Matt Darby 2009-02-18 15:24:04

il est préférable de stocker les fichiers sous forme de fichiers. Différentes bases de données traitent les données Blob différemment, donc si vous devez migrer votre extrémité arrière vous pourriez avoir des problèmes.

lorsque vous servez les impages d'un < img src= à un fichier qui existe déjà sur le serveur est susceptible d'être plus rapide que de faire un fichier temporaire à partir du champ de la base de données et de pointer la balise < img vers celui-ci.

j'ai trouvé cette réponse en googlant votre question et en lisant les commentaires à http://databases.aspfaq.com/database/should-i-store-images-in-the-database-or-the-filesystem.html

6
répondu sparklewhiskers 2009-02-18 15:21:20

j'aime généralement avoir des fichiers binaires dans la base de données parce que:

  • intégrité des données: pas de fichier non référencé, pas de chemin dans le db sans aucun fichier associé
  • cohérence des données: prenez une base de données dump et c'est tout. Non " O j'ai oublié de cibler ce répertoire de données."
6
répondu chburd 2009-02-18 15:26:26

stocker des images dans la base de données ajoute un DB overhead pour servir des images simples et rend difficile de décharger vers le stockage alternatif (S3, Akami) si vous augmentez à ce niveau. Les stocker dans la base de données rend beaucoup plus facile de déplacer votre application vers un serveur différent puisque c'est seulement la base de données qui doit se déplacer maintenant.

stocker des images sur le disque rend facile de décharger vers un autre stockage, rend les éléments statiques d'images afin que vous n'ayez pas à faire avec les en-têtes HTTP dans votre application web pour rendre les images cacheable. L'inconvénient est que si vous déplacez votre application vers un autre serveur, vous devez vous rappeler de déplacer les images aussi; quelque chose qui est facilement oublié.

4
répondu Adam Hawes 2009-02-23 10:25:10

pour les applications web, vous allez obtenir de meilleures performances en utilisant le système de fichiers pour stocker vos images. Cela vous permettra d'implémenter facilement la mise en cache des images à plusieurs niveaux dans votre application. Il y a certains avantages à stocker des images dans une base de données, mais la plupart du temps ces avantages viennent avec des applications basées sur le client.

3
répondu Dillie-O 2009-02-18 15:22:31

juste pour ajouter un peu plus aux réponses déjà bonnes jusqu'à présent. Vous pouvez toujours obtenir les avantages de la mise en cache à la fois du niveau web peut-être et le niveau de la base de données si vous allez la route vous gardant des images dans la base de données.

je pense que pour la base de données, vous pouvez y parvenir en stockant les images en relation avec les données textuelles qui leur sont associées et si vous pouvez accéder aux images dans un requête particulière de sorte que la base de données peut mettre en cache la requête (juste la théorie bien que donc n'hésitez pas à me nuke sur cette partie).

avec le côté web, Je suppose que puisque vous êtes question est étiqueté avec asp.net que vous utilisiez un gestionnaire http pour afficher les images. Ensuite, vous avez tous les avantages du framework à votre disposition et vous pouvez garder votre logique de domaine propre avec seulement avoir à passer la clé de votre image au gestionnaire http.

0
répondu MotoWilliams 2009-02-18 15:45:07

pourquoi ne pas choisir une base de données NoSql individuelle pour stocker vos fichiers.

il vous apporte avec l'intégrité des données ,la cohérence des données comme @chburd mentionné.

pendant que vous rdbms encore petit.

-1
répondu Will Wu 2011-11-09 03:30:08
  1. voici un exemple étape par étape (approche générale, mise en œuvre au printemps, Eclipse ) de stockage d'images dans le système de fichiers et de conservation de leurs métadonnées dans la base de données. -- http://www.devmanuals.com/tutorials/java/spring/spring3/mvc/Spring3MVCImageUpload.html
  2. voici un exemple aussi -- http://www.journaldev.com/2573/spring-mvc-file-upload-example-tutorial-single-and-multiple-files
  3. Vous pouvez également étudier une base de données de ce projet -- https://github.com/jdmr/fileUpload . Faites attention à ce contrôleur.
-1
répondu Lord Nighton 2015-09-27 11:37:29