11
votes

Stockage des données d'image dans une base de données MySQL?

Je suis en train de mettre en œuvre un projet qui traite d'une quantité importante d'images.

À votre avis, quels sont les inconvénients des deux approches suivantes: p>

  • Je dois stocker des milliers d'articles, chaque élément sous forme de propriétés de chaîne et une image. Li>
  • chaque élément sous forme d'identifiant (entier) li>
  • Tables Myisam Li>
  • Comment stockeriez-vous les images:
    • approche 1 forte>: stocker des images dans un répertoire et chaque image nommée comme id.jpg li>
    • approche 2 forte>: stocker des images dans la base de données en tant que blob binaire li> ul> li> ul>

      à l'aide de l'approche 1 Je peux accéder directement à l'image et c'est IT P>

      <img src="same_directory/10.jpg" />  
      


3 commentaires

De manière générale, le stockage de grandes blobs dans la base de données entrave réellement les performances. Si toutes les images sont de très petits fichiers, ce n'est pas si mauvais.


Si toutes les images ne sont pas JPG, comprimez avant d'enregistrer dans la base de données.


Dupliqué possible de stocker des images comme fichiers ou Dans la base de données pour une application Web?


5 Réponses :


1
votes

Je suis tenté d'utiliser la première approche car il n'y a pas de valeur réelle pour encombrer la base de données avec des données d'image. (La récupération des données de la base de données sera également nettement plus lente que la simple chargement du disque hors disque.)

Toutefois, comme une suggestion, vous ne voudrez peut-être pas stocker le chemin complet sur le disque sur l'image de la table de base de données, pour faciliter la transférabilité. (C'est-à-dire que vous stockez simplement la partie du chemin et du nom de fichier du fichier de base "connu".)


0 commentaires

2
votes

stocker sur le système de fichiers est plus rapide.


0 commentaires

0
votes

Gardez les fichiers image sous forme de fichiers d'image sur le serveur pour réduire votre charge de db et permettre au serveur de gérer la mise en cache, etc. Dans l'ensemble, cela dépend vraiment du type d'images dont nous parlons. Les petites miniatures (par exemple pour les icônes de fichier) ne seraient pas si mauvaises, mais je ne stockerais pas d'images entières dans la DB. En général, je suppose que l'approche du système de fichiers serait plus rapide.


0 commentaires

0
votes

permet d'enquêter sur le problème sur le navigateur Web. Lorsque vous chargez la page de 10 images enregistrées dans la base de données. Votre navigateur envoie une nouvelle demande HTTP au serveur. Chaque demande Demeure DB Connection et script côté serveur. Ou juste lire l'image statique du système de fichiers.

Qu'est-ce qui sera plus rapide?

Autre partie - Obtenez des données à partir du système de fichiers ou de la base de données. Si nous n'utilisons pas de cache pour la base de données (mais pour 10 Go d'images, vous devez disposer de 10 Go de RAM pour mettre en cache ces données). Le serveur de base de données et HTTP lit les données du système de fichiers dans tous les cas. Mais je pense que le navigateur HTTP lit les données plus rapidement, puis serveur de base de données.

Un seul inconvénient pour le stockage de la base de données - Très facile à migrer des données d'un serveur à d'autres. Mais cela n'a pas d'importance pour la performance du système.

Et n'oubliez pas de faire un chemin pour des images comme /a/b/c/abc.jpg - il sera plus rapide pour une grande quantité d'images, puis mettez toutes les images dans un répertoire.


1 commentaires

Je n'ai pas mentionné la subdivision de l'annuaire mais je l'ai déjà à l'esprit.



5
votes

Avantages de l'approche 1:

  • Récupération du serveur de fichiers plat Web Webserver est plus rapide.
  • La plupart des hôtes Web susceptibles de suivre cette approche.
  • Le système de fichiers est plus rapide pour le stockage de fichiers plat.

    Avantages de l'approche 2:

    • Toutes vos données sont conservées au même endroit, si vous migrez votre Site Web / Base de données Les images seront simplement là
    • Il est plus facile de trier / supprimer / etc ...
    • Depuis que vous devez le servir via un script PHP, vous pouvez effectuer des choses supplémentaires telles que la sécurité si nécessaire, ou traitement de l'image (Évidemment, vous pouvez aussi faire cela avec un fichier plat aussi, mais vous devez faire sûr que la sécurité ne peut pas être contournée en laissant les images dans un public Répertoire).

      Considérer l'approche de performance 1 est la meilleure pour procéder.


0 commentaires