web-dev-qa-db-fra.com

Quand utiliser MySQL BLOB est-il recommandé?

Je suis en train de coder une application qui va télécharger et supprimer de nombreux fichiers. En général, je ne déplace que les fichiers dans un dossier du serveur, en les nommant avec la ligne unique id. Mais si je comprends bien, MySQL me permet également de stocker des données binaires (fichiers). Quand est-ce que ce serait un meilleur choix ?.

Veuillez utiliser des arguments solides, comme Quand l'utilisation de BLOB signifie-t-elle une amélioration des performances?.

P.S: J'utilise MyISAM si cela compte.

Merci.


UPDATE:

Questions connexes :
- Stockage d'images dans DB - Oui ou Non?
- A faire ou à ne pas faire: stocker des images dans une base de données (grâce à Sebastian)

UPDATE 2

Stocker les fichiers dans la base de données n’est pas une nécessité j’essaie de savoir quand est-ce une meilleure idée que de les stocker dans des dossiers.

17
amosrivera

Lis:

qui conclut

Si vous avez parfois besoin de récupérer une image Qui doit être disponible sur plusieurs serveurs Web différents. Mais je Pense que c'est à peu près tout.

  • S'il n'est pas nécessaire qu'il soit disponible sur Plusieurs serveurs, il est toujours préférable de De les placer dans le système de fichiers. 
  • S'il doit Être disponible sur plusieurs serveurs et que Il y ait une sorte de charge dans Du système, vous aurez besoin d'un type de stockage distribué .
12
Sebastian Zaklada

Si vous utilisez le moteur de base de données MyISAM, les champs BLOB peuvent être indexés afin que vous puissiez effectuer des recherches rapides sur vos fichiers à l'aide de la base de données.

Un autre avantage du stockage des fichiers dans les champs BLOB est qu’ils sont plus accessibles que les fichiers du disque (il n’est pas nécessaire de parcourir les répertoires, d’ouvrir, de lire, de fermer).

Si vous envisagez de stocker de nombreux fichiers dans MYSQL, il est généralement recommandé de les stocker dans une table séparée. Cela vous permet de scanner les méta-informations sans trébucher sur les blobs. Ensuite, lorsque vous devez récupérer un blob, le système JOIN est suffisamment efficace.

9
Roman

Eh bien, il est un peu vieux, mais cet article expose quelques arguments décents pour le stockage BLOB: http://www.dreamwerx.net/site/article01

Bien que vos performances ne soient pas un gain de performances en soi, le fait d’avoir vos images et d’autres choses dans une base de données plutôt que dans un répertoire devrait également éliminer les problèmes de liaison dynamique (en supposant qu’il s’agisse d’une application Web accessible au public).

2
Tieson T.

Êtes-vous lié à l'utilisation de MySQL? Sinon, essayez un ODBMS ou PostgreSQL pour stocker des fichiers, ou vous pouvez stocker uniquement les chemins d'accès des fichiers. Voir this par exemple.

0
user656781

Memcache n'est pas une solution alternative, car vous devez gérer la redondance et TTL sur des serveurs distribués, ce qui rend la maintenance plus difficile.

La meilleure solution, à mon avis, consiste à placer les données statiques publiques sur un CDN qui est distribué par conception et des données statiques privées sur la base de données pour faciliter la distribution sur plusieurs serveurs.

Chaque serveur peut implémenter son propre Memcache à chaque hit.

Si vous avez déjà stocké des données dans le système de fichiers et que vous souhaitez les migrer vers une base de données, le moyen le plus simple consiste à créer une table de valeurs de clé comprenant les éléments suivants:

KEY = '/ image/filename' (chaîne de l'emplacement du système de fichiers), value = BLOB (le fichier réel) et construisez un wrapper qui l'obtiendra de la base de données à l'aide de la réécriture des règles et du traitement de l'application. De cette façon, vous pouvez utiliser une transparence totale avec votre code existant.

0
guykaplan