Question

J'ai lu des articles à ce sujet mais je ne comprends toujours pas quelle est la meilleure solution dans mon cas.

Je commence à écrire une nouvelle application Web et le back-end fournira environ 1 à 10 millions d'images . (taille moyenne 200-500 Ko pour une seule image)

Mon site fournira du contenu et des images à 100-1 000 utilisateurs simultanément.

Je voudrais aussi garder les coûts de fournisseur aussi bas que possible (mais ceci est une exigence secondaire). Je pense que l’espace système de fichiers est moins coûteux que le coût de la taille de la base de données.

Personnellement, j’aime l’idée d’avoir toutes mes images dans la BD mais toute suggestion sera vraiment appréciée :)

Pensez-vous que dans mon cas, l’approche PD est le bon choix?

Était-ce utile?

La solution

Mettre toutes ces images dans votre base de données le rendra très, très gros. Cela signifie que votre moteur de base de données sera en train de mettre en cache toutes ces images (une tâche pour laquelle il n'est pas vraiment conçu) lorsqu'il risque de mettre en cache des données d'application chaudes.

Laissez la mise en cache des fichiers au système d'exploitation et / ou à votre proxy inverse: ils y parviendront mieux.

Autres conseils

Autres raisons de stocker des images sur le système de fichiers:

  • Les serveurs d’images peuvent fonctionner même lorsque la base de données est occupée ou en panne.
  • Les systèmes de fichiers sont conçus pour stocker des fichiers et sont très efficaces.
  • La sauvegarde de données dans votre base de données entraîne des sauvegardes et autres opérations plus lentes.
  • Aucun code côté serveur n'est nécessaire pour diffuser une image, c'est tout simplement le vieil IIS / Apache.
  • Vous pouvez évoluer plus rapidement avec des serveurs Web peu coûteux ou, éventuellement, vers un CDN.
  • Vous pouvez effectuer des tâches connexes (générer des vignettes, etc.) sans faire intervenir la base de données.
  • Votre serveur de base de données peut conserver davantage de " real " données de table en mémoire, où vous obtenez votre vitesse de base de données pour les requêtes. S'il utilise sa précieuse mémoire pour conserver les fichiers d'image en mémoire cache, cela n'apporte pratiquement rien en terme de rapidité, par rapport au fait d'avoir davantage d'index photo en mémoire.

La plupart des grands sites utilisent le système de fichiers.

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

Lorsque vous utilisez des objets binaires, suivez une approche centrée sur le document pour l'architecture et ne stockez pas de documents tels que des fichiers PDF et des images dans la base de données. Vous devrez éventuellement le refactoriser lorsque vous constaterez toutes sortes de problèmes de performances avec votre base de données. Stockez simplement le fichier sur le système de fichiers et insérez le chemin dans une table de votre base de données. Il existe également une limite physique à la taille du type de données que vous utiliserez pour la sérialiser et l’enregistrer dans la base de données. Il suffit de le stocker sur le système de fichiers et d'y accéder.

Votre première phrase indique que vous avez lu certains articles sur le sujet. Par conséquent, je ne me ferai pas la peine de mettre des liens vers des articles traitant de cela. D'après mon expérience, et en fonction de ce que vous avez publié en ce qui concerne le nombre et la taille des images, vous allez payer cher en performances de base de données si vous les stockez dans la base de données. Je les stockais dans le système de fichiers.

Quelle base de données utilisez-vous? MS SQL Server 2008 fournit le stockage FILESTREAM

  

permet le stockage et l'accès efficace aux données BLOB à l'aide d'une combinaison de SQL Server 2008 et du système de fichiers NTFS. Il couvre les choix de stockage BLOB, la configuration de Windows et SQL Server pour l’utilisation des données FILESTREAM, les considérations relatives à la combinaison de FILESTREAM avec d’autres fonctionnalités et les détails d’implémentation tels que le partitionnement et les performances.

détails

Nous utilisons FileNet, un serveur optimisé pour la création d'image. C'est très cher. Une solution moins coûteuse consiste à utiliser un serveur de fichiers.

N'envisagez pas de stocker des fichiers volumineux sur un serveur de base de données.

Comme d'autres l'ont mentionné, stockez les références aux gros fichiers de la base de données.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top