web-dev-qa-db-fra.com

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

Ma question est assez générique et je sais qu'il pourrait ne pas y avoir de réponse à 100%. Je suis en train de créer une ASP solution Web .NET qui comprendra beaucoup d'images et, espérons-le, une bonne quantité de trafic. Je veux vraiment obtenir des performances.

Dois-je enregistrer les images dans la base de données ou sur le système de fichiers? Et quelle que soit la réponse, je suis plus intéressé par le choix d'une méthode spécifique.

Merci beaucoup, Stefan

[~ # ~] dupliquer [~ # ~] : Stockage d'images dans la base de données - Oui ou non? , Comment stocker des images dans votre système de fichiers , Stockage d'un petit nombre d'images: blob ou fs? et probablement quelques autres.


COMMENTAIRE: Merci pour de nombreuses bonnes réponses. J'irai pour une solution basée sur des fichiers même si j'aime l'idée d'avoir une solution 100% pilotée par une base de données. Il semble qu'il existe aujourd'hui de bonnes solutions pour faire ce que je veux avec des 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. Cela coûtera cher pour un stockage supplémentaire dans la base de données.

  • Je ne suis pas un expert de la base de données et je ne contrôle pas non plus les paramètres de la base de données. Une solution basée sur une base de données peut nécessiter une configuration personnalisée à quoi elle ressemble.

Si nous allons passer à exécuter le site sur notre propre serveur, je pourrais envisager une solution basée sur la base de données. merci, Stefan

119
StefanE

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

Pourquoi? Car...

  1. Vous pourrez servir les images sous forme de fichiers statiques.
  2. Aucun accès à la base de données ou code d'application ne sera nécessaire pour récupérer les images.
  3. Les images peuvent être servies à partir d'un autre serveur pour améliorer les performances.
  4. Cela réduira le goulot d'étranglement de la base de données.
  5. La base de données stocke finalement ses données sur le système de fichiers.
  6. Les images peuvent être facilement mises en cache lorsqu'elles sont stockées sur le système de fichiers.
170
Akbar ibrahim

Dans mes projets récemment développés, j'ai stocké des images (et toutes sortes de documents binaires) sous forme de colonnes d'images dans des 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 vous retrouvez 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 (= métadonnées) et le disque dur (= stockage de fichiers) n'est pas intégrée et doit être programmé manuellement.

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

11
devio

L'adage a toujours été "Fichiers dans le système de fichiers, métadonnées des fichiers dans la base de données"

7
Matt Darby

Mieux vaut stocker des fichiers en tant que fichiers. Différentes bases de données gèrent les données Blob différemment, donc si vous devez migrer votre serveur principal, vous risquez d'avoir des problèmes.

Lors de la diffusion des images, un <img src = vers un fichier qui existe déjà sur le serveur est susceptible d'être plus rapide que de créer un fichier temporaire à partir du champ de base de données et de pointer la balise <img vers celui-ci.

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

6
sparklewhiskers

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

  • intégrité des données: pas de fichier non référencé, pas de chemin dans la base de données sans aucun fichier associé
  • cohérence des données: effectuez un vidage de la base de données et c'est tout. non "O j'ai oublié de cibler ce répertoire de données."
6
chburd

Le stockage d'images dans la base de données ajoute une surcharge de base de données pour servir des images uniques et rend difficile le déchargement vers un autre stockage (S3, Akami) si vous atteignez ce niveau. Les stocker dans la base de données facilite le déplacement de votre application vers un autre serveur, car seule la base de données doit être déplacée maintenant.

Le stockage d'images sur le disque facilite le déchargement vers un autre stockage, rend les images statiques afin que vous n'ayez pas à vous soucier des en-têtes HTTP dans votre application Web pour rendre les images pouvant être mises en cache. L'inconvénient est que si vous déplacez votre application vers un autre serveur, vous devez également vous rappeler de déplacer les images; quelque chose qui est facilement oublié.

4
Adam Hawes

Pour les applications Web, vous obtiendrez 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. Le stockage d'images dans une base de données présente certains avantages, mais la plupart du temps, ces avantages sont fournis avec les applications clientes.

3
Dillie-O

Juste pour ajouter un peu plus aux bonnes réponses jusqu'à présent. Vous pouvez toujours obtenir les avantages de la mise en cache à la fois au niveau du Web peut-être et au niveau de la base de données si vous suivez la voie qui vous maintient images dans la base de données.

Je pense que pour la base de données, vous pouvez y parvenir par la façon dont vous stockez les images par rapport aux données textuelles qui leur sont associées et si vous pouvez accéder aux images dans une requête particulière afin que la base de données peut mettre en cache la requête (juste de la théorie, alors n'hésitez pas à me nuke sur cette partie).

Avec le côté Web, je suppose que puisque votre question est balisée avec asp.net que vous utiliseriez un gestionnaire http pour servir les images. Ensuite, vous avez tous les avantages du cadre à votre disposition et vous pouvez garder votre logique de domaine plus propre sans avoir à transmettre la clé de votre image au gestionnaire http.

0
MotoWilliams