Question

En général, dans quelle mesure le stockage d'un fichier dans une base de données (en particulier mssql) par opposition au système de fichiers a-t-il une incidence négative sur les performances ?Je ne parviens pas à trouver une raison en dehors de la portabilité des applications pour laquelle je voudrais stocker mes fichiers en tant que varbinaries dans SQL Server.

Était-ce utile?

La solution

Jetez un oeil à cette réponse:

Stockage d'images dans une base de données - Oui ou non ?

Essentiellement, l’espace et les performances peuvent être assez importants, en fonction du nombre d’utilisateurs.Gardez également à l’esprit que les serveurs Web sont bon marché et que vous pouvez facilement en ajouter davantage pour équilibrer la charge, alors que la base de données est généralement la partie la plus chère et la plus difficile à faire évoluer d’une architecture Web.

Il existe des exemples opposés (par exemple, Microsoft Sharepoint), mais généralement, stocker des fichiers dans la base de données n'est pas une bonne idée.

À moins que vous n'écriviez des applications de bureau et/ou que vous sachiez à peu près combien d'utilisateurs vous aurez un jour, mais sur quelque chose d'aussi aléatoire et inattendu qu'un site Web public, vous risquez de payer un prix élevé pour le stockage de fichiers dans la base de données.

Autres conseils

Si vous pouvez passer à SQL Server 2008, vous pouvez profiter de la prise en charge de FILESTREAM qui vous offre le meilleur des deux : les fichiers sont stockés dans le système de fichiers, mais l'intégration de la base de données est bien meilleure que le simple stockage d'un chemin de fichier dans un champ varchar.Votre requête peut renvoyer un flux de fichiers .NET standard, ce qui rend l'intégration beaucoup plus simple.

Premiers pas avec le stockage FILESTREAM

Je dirais que cela dépend de votre situation.Par exemple, je travaille dans une administration locale et nous avons beaucoup d'images comme des photos, etc.Nous n'avons pas un grand nombre d'utilisateurs, mais nous avons besoin d'une bonne sécurité et d'un bon audit autour des données.La base de données est une meilleure solution pour nous car elle facilite les choses et nous n'allons pas rencontrer de problèmes de mise à l'échelle.

Quelle est la question ici ?

Les SGBD modernes SQL2008 disposent de diverses manières de gérer les BLOB qui ne se contentent pas de les coller dans une table.Il y a bien sûr des avantages et des inconvénients, et vous devrez peut-être y réfléchir un peu plus en profondeur.

C'est un article intéressant, rédigé par feu (?) Jim Gray

Vers BLOB ou ne pas vers BLOB :Stockage d'objets volumineux dans une base de données ou un système de fichiers

D'après ma propre expérience, il est toujours préférable de stocker les fichiers sous forme de fichiers.La raison en est que le système de fichiers est optimisé pour le stockage de fichiers, alors qu'une base de données ne l'est pas.Bien entendu, il existe quelques exceptions (par ex.le système de fichiers MS de nouvelle génération tant annoncé est censé être construit sur le serveur SQL), mais en général, c'est ma règle.

Bien que les performances soient un problème, je pense que les conceptions de bases de données modernes ont rendu ce problème beaucoup moins important pour les petits fichiers.

Outre les performances, cela dépend également du degré de couplage étroit des données.Si le fichier contient des données étroitement liées aux champs de la base de données, il lui appartient conceptuellement à proximité et peut être stocké dans un blob.S'il contient des informations susceptibles de concerner plusieurs enregistrements ou d'avoir une certaine utilité en dehors du contexte de la base de données, alors il appartient à l'extérieur.Par exemple, une image sur une page Web est récupérée sur une requête distincte à partir de la page qui y renvoie, elle peut donc appartenir à l'extérieur (en fonction de la conception spécifique et des considérations de sécurité).

Notre compromis, et je ne promets pas que ce soit le meilleur, a été de stocker des fichiers XML de petite taille dans la base de données, mais des images et autres fichiers en dehors.

Nous avons pris la décision de stocker en tant que varbinary pour http://www.freshlogicstudios.com/Products/Folders/ à mi-chemin, je m'attends à des problèmes de performances.Je peux dire que nous avons été agréablement surpris de voir à quel point tout s'est bien passé.

Je suis d'accord avec @ZombieSheep.Encore une chose : je ne pense généralement pas que les bases de données doivent réellement être portables, car vous manquez toutes les fonctionnalités fournies par votre fournisseur de SGBD.Je pense que migrer vers une autre base de données serait la dernière chose à envisager.Juste mon 0,02 $

La surcharge liée à l'analyse d'un blob (image) dans un tableau d'octets, puis à son écriture sur le disque sous le nom de fichier approprié, puis à sa lecture constitue une surcharge suffisante pour vous décourager de le faire trop souvent, surtout si les fichiers sont plutôt grand.

Je ne veux pas être vague ou quoi que ce soit, mais je pense que le type de « fichier » que vous stockerez est l’un des facteurs déterminants les plus importants.Si vous parlez essentiellement d'un grand champ de texte qui pourrait être stocké sous forme de fichier, ma préférence serait pour le stockage de base de données.

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