Stocker des images dans le serveur SQL?

j'ai créé un petit site de démonstration et j'y stocke des images dans une colonne image sur le serveur sql. Quelques questions que j'ai...

  • Est-ce une mauvaise idée?

  • est-ce que cela affectera la performance sur mon site quand il se développe?

l'alternative serait de stocker l'image sur disque et seulement stocker la référence à l'image dans la base de données. Ce doit être un dilemme commun beaucoup de gens ont eu. J'aimerais recevoir quelques conseils et serait heureux de faire moins d'erreur si je le pouvais.

152
demandé sur Benpai 2011-04-10 22:40:12

6 réponses

il y a un très bon papier de Microsoft Research appelé à Blob ou pas à Blob .

leur conclusion après un grand nombre d'essais et d'analyses de performance est la suivante:

  • si vos photos ou votre document sont typiquement de taille inférieure à 256K, les stocker dans une colonne VARBINARY de base de données est plus efficace

  • si vos photos ou document sont typiquement plus de 1 Mo de taille, les stocker dans le système de fichiers est plus efficace (et avec L'attribut FILESTREAM de SQL Server 2008, ils sont toujours sous contrôle transactionnel et font partie de la base de données)

  • entre ces deux-là, c'est un peu un coup monté selon votre utilisation

si vous décidez de mettre vos photos dans une table de Serveur SQL, je recommande fortement l'utilisation d'une table séparée pour stocker ceux photos - ne pas stocker l'employé photo dans la table des employés, gardez - les dans un tableau distinct. De cette façon, la table des employés peut rester mince et moyenne et très efficace, en supposant que vous n'avez pas toujours besoin de sélectionner la photo de l'employé, aussi, dans le cadre de vos requêtes.

pour les groupes de fichiers, cliquez sur Files and Filegroup Architecture pour une introduction. Fondamentalement, vous créeriez soit votre base de données avec un groupe de fichiers séparé pour les grandes structures de données dès le début, ou ajouter un groupe de fichiers plus tard. Appelons-le"LARGE_DATA".

maintenant, chaque fois que vous avez une nouvelle table à créer qui doit stocker les colonnes VARCHAR(MAX) ou VARBINARY(MAX), vous pouvez spécifier ce groupe de fichiers pour les grandes données:

 CREATE TABLE dbo.YourTable
     (....... define the fields here ......)
     ON Data                   -- the basic "Data" filegroup for the regular data
     TEXTIMAGE_ON LARGE_DATA   -- the filegroup for large chunks of data

Découvrez L'intro MSDN sur filegroups, et jouez avec!

216
répondu marc_s 2011-04-14 16:33:27

je suis tombé dans ce dilemme une fois, et a cherché tout à fait un peu sur google pour les opinions. Ce que j'ai trouvé, c'est qu'en effet, beaucoup voient la sauvegarde d'images sur le disque mieux pour les plus grandes images, tandis que mySQL permet un accès plus facile, en particulier à partir de langages comme PHP.

j'ai trouvé une question similaire

MySQL BLOB vs File for Storing Small PNG Images?

mon verdict final était que pour des choses comme un profil image, juste une petite image carrée qui doit être là par utilisateur, mySQL serait mieux que de stocker un tas de pouces dans le disque dur, tandis que pour les albums photos et des choses comme ça, les dossiers/fichiers image sont mieux.

j'Espère que ça aide

14
répondu Kevin Chavez 2017-05-23 11:47:32

je préfère stocker l'image dans un répertoire, puis stocker une référence vers le fichier image dans la base de données.

cependant, si vous stockez l'image dans la base de données, vous devriez partager votre base de données de sorte que la colonne image réside dans un fichier séparé.

vous pouvez en savoir plus sur l'utilisation de filegroups ici http://msdn.microsoft.com/en-us/library/ms179316.aspx .

12
répondu John Hartsock 2016-12-30 06:30:05

pourquoi il peut être bon de stocker des images dans la base de données et pas dans un catalogue sur le serveur web.

vous avez fait une application avec beaucoup d'images stockées dans un dossier sur le serveur, que le client a utilisé pendant des années.

maintenant ils viennent à vous. Leur serveur a été détruit et ils ont besoin de le restaurer sur un nouveau serveur. Ils n'ont plus accès à l'ancien serveur. La seule sauvegarde qu'ils ont est la base de données sauvegarde.

vous avez bien sûr la source et pouvez simplement le déployer sur le nouveau serveur, installer SqlServer et restaurer la base de données. Mais maintenant, toutes les photos ont disparu.

si vous avez sauvegardé les photos dans SqlServer tout fonctionnera comme avant.

juste mes 2 cents.

8
répondu Erling Ervik 2016-01-13 11:32:16

lors du stockage des images dans le serveur SQL ne pas utiliser le type de données "image" , selon MS il est en cours d'élimination progressive dans de nouvelles versions du serveur SQL. Utiliser varbinary (max) au lieu de

https://msdn.microsoft.com/en-us/library/ms187993.aspx

7
répondu Zailon Xwadastet 2016-03-01 19:30:52

une autre option a été libérée en 2012 appelée tables de fichiers: https://msdn.microsoft.com/en-us/library/ff929144.aspx

7
répondu Cyrus Downey 2016-03-01 20:20:19