415 votes

Stockage des images dans la base de données - Oui ou non ?

J'utilise donc une application qui stocke beaucoup d'images dans la base de données. Quel est votre point de vue à ce sujet ? Je suis plutôt du genre à stocker l'emplacement dans le système de fichiers, plutôt que de le stocker directement dans la base de données.

Quels sont, selon vous, les avantages et les inconvénients ?

350voto

Mark Harrison Points 77152

Je suis responsable de certaines applications qui gèrent plusieurs To d'images. Nous avons constaté que le stockage chemins de fichiers dans la base de données pour être le meilleur.

Il y a quelques problèmes :

  • le stockage des bases de données est généralement plus coûteux que celui des systèmes de fichiers
  • vous pouvez super-accélérer l'accès au système de fichiers avec des produits standard prêts à l'emploi
    • Par exemple, de nombreux serveurs web utilisent le système d'exploitation de l'entreprise. sendfile() pour envoyer de manière asynchrone un fichier directement du système de fichiers à l'interface réseau. Les images stockées dans une base de données ne bénéficient pas de cette optimisation.
  • les éléments tels que les serveurs web, etc., n'ont pas besoin d'un codage ou d'un traitement spécial pour accéder aux images du système de fichiers.
  • Les bases de données l'emportent lorsque l'intégrité transactionnelle entre l'image et les métadonnées est importante.
    • il est plus complexe de gérer l'intégrité entre les métadonnées de la BD et les données du système de fichiers
    • il est difficile (dans le contexte d'une application web) de garantir que les données ont été vidées sur le disque du système de fichiers.

140voto

Rad Points 6308

Comme pour la plupart des problèmes, ce n'est pas aussi simple qu'il y paraît. Dans certains cas, il serait judicieux de stocker les images dans la base de données.

  • Vous stockez des images qui changent dynamiquement, disons des factures et vous voulez obtenir une facture telle qu'elle était le 1er janvier 2007 ?
  • Le gouvernement veut que vous conserviez 6 ans d'historique.
  • Les images stockées dans la base de données ne nécessitent pas une stratégie de sauvegarde différente. Les images stockées sur le système de fichiers
  • Il est plus facile de contrôler l'accès aux images si elles sont dans une base de données. Les administrateurs non avertis peuvent accéder à n'importe quel dossier sur le disque. Il faut un administrateur vraiment déterminé pour aller fouiner dans une base de données et extraire les images.

D'autre part, il y a des problèmes associés

  • Nécessitent du code supplémentaire pour extraire et diffuser les images
  • La latence peut être plus lente que l'accès direct aux fichiers
  • Charge plus lourde sur le serveur de la base de données

99voto

jason saldo Points 5036

Magasin de fichiers. Les ingénieurs de Facebook ont eu une grande discussion à ce sujet. L'une des leçons à retenir est qu'il faut connaître la limite pratique des fichiers dans un répertoire.

Une aiguille dans une botte de foin : Stockage efficace de milliards de photos

56voto

Ray Points 22127

C'est peut-être un peu tiré par les cheveux, mais si vous utilisez (ou prévoyez d'utiliser) SQL Server 2008, je vous recommande de jeter un coup d'œil à la nouvelle version de l'outil de gestion de l'information. FileStream type de données.

FileStream résout la plupart des problèmes liés au stockage des fichiers dans la base de données :

  1. Les Blobs sont en fait stockés comme des fichiers dans un dossier.
  2. On peut accéder aux Blobs en utilisant soit une connexion à une base de données ou sur le système de fichiers.
  3. Les sauvegardes sont intégrées.
  4. La migration "fonctionne tout simplement".

Cependant, le "cryptage transparent des données" de SQL ne crypte pas les objets FileStream. Si cela est important, il est préférable de les stocker en tant que fichiers varbinaires.

Extrait de l'article de MSDN :

Les instructions Transact-SQL peuvent insérer, mettre à jour, interroger, rechercher et sauvegarder les données FILESTREAM. Les interfaces de système de fichiers Win32 fournissent un accès en continu aux données.
FILESTREAM utilise le cache du système NT pour mettre en mémoire les données des fichiers. Cela permet de réduire tout effet que les données FILESTREAM pourraient avoir sur les performances du moteur de base de données. Le pool de mémoire tampon du serveur SQL n'est pas utilisé ; cette mémoire est donc disponible pour le traitement des requêtes.

39voto

Greg Hurlman Points 10944

Les chemins de fichiers dans la BD sont définitivement C'est la voie à suivre - j'ai entendu de nombreuses histoires de clients ayant des To d'images que c'est devenu un cauchemar d'essayer de stocker une quantité significative d'images dans une BD - l'impact sur les performances est trop important.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X