Mysql
 sql >> Base de données >  >> RDS >> Mysql

Quand stocker des images dans une base de données (mySQL) et quand pas ? (Lier l'image à l'élément dans la base de données)

Avantages du stockage des images/blobs dans la base de données

  • Le stockage des images fait automatiquement partie de vos transactions
  • Pas besoin de nettoyer le système de fichiers et de le synchroniser avec la base de données
  • L'accès aux images est contrôlé par les mêmes moyens que l'accès au reste des données
  • Une seule sauvegarde à prendre en compte
  • Une base de données est généralement mieux adaptée pour stocker des millions (voire des milliards) d'enregistrements. Dans le système de fichiers, vous devez trouver une répartition intelligente sur plusieurs répertoires. Un seul répertoire ne pourra pas gérer efficacement des millions de fichiers.
  • Pour certaines charges de travail, le stockage des images dans la base de données peut en fait être plus rapide.
    Pour SQL Server, Microsoft a en fait testé ceci :
    http://research.microsoft.com/apps/pubs/default.aspx?id=64525
    Je ne serais pas surpris si d'autres bases de données se comportaient de la même manière.

Inconvénients :

  • Rend votre base de données et donc vos sauvegardes beaucoup plus volumineuses (pensez au temps qu'il faut pour la restaurer).
  • les systèmes de fichiers sont généralement meilleurs avec des sauvegardes incrémentielles (sauf si vous avez le RMAN d'Oracle)
  • les images ne sont pas accessibles par d'autres applications (par exemple, un serveur Web, des outils de redimensionnement d'image, un serveur FTP)
  • Les images ne peuvent pas être diffusées sur un réseau de distribution de contenu pour l'équilibrage de charge dans une application Web (pour alléger la charge du serveur d'application)
  • la croyance commune est que la récupération à partir de la base de données sera plus lente.
  • pour certaines bases de données, la récupération des blobs peut en fait diminuer l'efficacité du cache de la base de données (ce n'est pas le cas pour Oracle, SQL Server et PostgreSQL. Je ne sais pas pour MySQL cependant)