Site Web de gestion de l'immobilier où les utilisateurs peuvent télécharger des photos et des documents de location. Pour chaque unité d'appartements, il pourrait y avoir 4 photos, il n'ya donc pas de nombre écrasant de photo dans le système. p>
Pour les photos, il y aura des vignettes de chacun. p>
La priorité de ma n ° 1 est la performance. Pour l'utilisateur final, je veux charger des pages et montrer l'image aussi vite que possible. p>
devrais-je stocker les images dans la base de données ou le système de fichiers ou n'a pas d'importance? Dois-je mettre en cache quoi que ce soit? P>
Merci d'avance! P>
6 Réponses :
Système de fichiers. Pas de compétition. Les données doivent passer par beaucoup plus de couches lorsque vous le stockez dans la DB. P>
Modifier sur la mise en cache: Si vous souhaitez mettre en cache le fichier pendant que l'utilisateur le télécharge pour vous assurer que l'opération se termine dès que possible, le jeter directement sur le disque (c'est-à-dire que le système de fichiers) est à peu près aussi rapide que possible. Tant que les fichiers ne sont pas trop gros et que vous n'avez pas trop d'utilisateurs simultanés, vous pouvez «cacher» le fichier en mémoire, revenir à l'utilisateur, puis enregistrer sur le disque. Pour être honnête, je ne me dérangerais pas. P>
Si vous effectuez les fichiers disponibles sur le Web après avoir été téléchargés et que vous souhaitez mettre en cache pour améliorer les performances, le système de fichiers est toujours la meilleure option. Vous obtiendrez une mise en cache gratuitement (peut avoir à ajuster un paramètre ou deux) de votre serveur Web. Vous n'aurez pas cela si les fichiers sont dans la base de données. P>
Après tout ce que cela semble vous semble ne jamais stocker des fichiers dans la base de données. Pas le cas, vous avez juste besoin d'une bonne raison de le faire. P>
@Daniel. Quel est le "réglage ou deux" que je dois ajuster sur le serveur Web pour obtenir la meilleure performance de mise en cache possible?
Pourriez-vous s'il vous plaît clarifier, s'il y aurait une nécessité de mettre en cache les fichiers que le navigateur effectue la mise en cache pour les fichiers image par elle-même.
Bien qu'il existe des exceptions à tout, le cas général est que le stockage des images dans le système de fichiers est votre meilleur choix. Vous pouvez facilement fournir des services de mise en cache aux images, vous n'avez pas à vous soucier de vous inquiéter du code supplémentaire pour gérer le traitement de l'image, et vous pouvez facilement la maintenance sur les images si nécessaire via des méthodes d'édition d'image standard. P>
On dirait que votre modèle d'entreprise convient parfaitement à ce scénario. P>
Voulez-vous ajouter, ce qui est dit par Daniel, qu'une base de données est juste une couche, sur laquelle le questionneur souhaite placer des fichiers.
+1 convenu - FS Hands-Bas dans ce cas. Une chose à conscience de si / lorsque vous aurez que beaucoup de fichiers est une structure de système de fichiers saints (par exemple, ne pas avoir cent mille fichiers dans un seul dossier). Cela dit, gardez vos chemins dans la DB et les fichiers sur disque.
Les chemins de dB et de fichiers sur disque sont une très belle approche moderne de cela. Je sais que SQL Server 2008 a un type de données filestream ou quelque chose à cet effet qui fonctionne de manière similaire.
Merci Squid, j'ai pensé à créer un dossier pour chaque «société cliente» plutôt que de 1 grande vidage d'un dossier
@ Dillie-O: Pourriez-vous s'il vous plaît clarifier, s'il y aurait une nécessité de mettre en cache les fichiers car le navigateur fait la mise en cache des fichiers image par lui-même.
@Marcos: Je ne suis pas tout à fait suivi. Faites-vous référence aux services de mise en cache d'image ou à autre chose?
stocker définitivement vos images sur le système de fichiers. Une préoccupation que les gens ne considèrent pas assez lorsque celles-ci envisagent de ces types de choses; Des images en grammage comme des blobs binaires dans votre base de données sont un moyen très rapide de BLOQUE de votre DB. Avec une grande base de données, des exigences matérielles plus élevées, des exigences plus difficiles de réplication et de sauvegarde, etc. En collaborant vos images sur un système de fichiers signifie que vous pouvez les sauvegarder / les répliquer facilement avec de nombreux outils existants et simplement. L'espace de stockage est beaucoup plus facile à augmenter sur le système de fichiers que dans la base de données, également. P>
Un dB pourrait être em> être plus rapide qu'un système de fichiers sur certaines opérations, mais la chargement d'une partie de données bien identifiée de 100s de KB n'est pas l'une d'elles. P>
En outre, un bon Webserver frontaend (comme Nginx) est bien plus rapide que n'importe quel calque WebApp à écrire pour lire le blob de la DB. Dans certains tests, Nginx est à peu près au pair avec memcached pour des données brutes portant des fichiers de taille moyenne (comme de gros HTML ou des images de taille moyenne). P>
aller fs. Pas de concours. P>
Vérifiez l'en-tête de réponse «X-Accel-redirect» si vous souhaitez servir des fichiers multi-mégaoctets avec un contrôle d'accès complet à partir de votre application Web et de la vitesse complète NGinx.
Peut-être sur une légère tangente, mais dans Cette vidéo de La conférence MySQL, le présentateur parle de la manière dont le site Web SMUGMUG utilise MySQL et diverses autres technologies pour une performance supérieure. Je pense que la vidéo s'appuie sur certaines des réponses publiées ici, mais suggère également des moyens d'améliorer les performances du site Web en dehors de la portée de la DB. P>
commentaire à la réponse du mouton. em> p>
Dans les fichiers de stockage communs dans SQL est meilleur lorsque la taille du fichier est inférieure à 256 kilo-octets, et vaut la peine de plus de 1 mégaoctet. Donc, entre 256 et 1024 kilo-octets, cela dépend de plusieurs facteurs. Lire Ce Pour en savoir plus sur les raisons d'utiliser SQL ou Systèmes de fichiers . p>
la même question que je cherchais.