MySQL et la gestion des images avec les BLOB ou dans PHP ?

osscour Messages postés 16 Date d'inscription lundi 23 août 2004 Statut Membre Dernière intervention 24 septembre 2004 - 6 sept. 2004 à 23:42
phpwankenobi Messages postés 152 Date d'inscription jeudi 10 avril 2003 Statut Membre Dernière intervention 18 novembre 2004 - 9 sept. 2004 à 17:11
Salut,

on se pose de ces questions dans la vie... :)

je lis parfois qu'on peut gérer les images d'un site dans MySQL en mettant le chemin de parcours en entier dans un fichier TEXT ou BLOB .

ex : images/2004/voitures/ferrari.png

Puis, avec PHP on les affiche selon ce chemin en HTML
$chemin est le chemin du fichier image récupéré par requête dans la base.

:?

Mais je lis aussi que l'on peut associer les images en les numérotant ex :

1.jpg, 1264.gif

Le numéro étant récupéré avec le champ identifiant unique
id_champ
de la table de MySQL.

On lit qu'utiliser BLOB réduit les performances de la base. :roll:

Alors moi je voudrais bien connaître le fin mot de l'histoire :?:
Quels sont les avantages de chaque solutions ?
En pratique laquelle est la + utilisée et pourquoi ?

Si je veux associer plusieurs photos à un article par exemple, j'ai recours à quelle solution et pourquoi ?

J'attends les explications avec impatience :wink:

Merci.

3 réponses

phpwankenobi Messages postés 152 Date d'inscription jeudi 10 avril 2003 Statut Membre Dernière intervention 18 novembre 2004
7 sept. 2004 à 10:12
Salut,

Voici ma vision des choses (qui est en partie en contradiction avec ce que tu écris).

Pour moi un blob sert à contenir la source binaire d'un objet (image, document word ...), mais en aucun cas le chemin d'accès à un tel objet. Le champ de type text lui peut servir à stocker le chemin d'accès, bien qu'un varchar bien taillé suffirait.

Je pense effectivement qu'un blob réduit les performances du fait de sa taille, de plus c'est apparemment assez délicat de manipuler les blob (alimentation + restitution).

Pour associer plusieurs photos à un article j'utilise deux tables :

la table article avec un champ idarticle (puis d'autres champs au choix) , puis la table article_photos avec un champ idarticlephoto, un champ idarticle (se rapportant à la table articles), puis d'autres champs au choix (nottament le chemin vers la photo...)

Il est ainsi aisé d'écrire un code qui pour chaque article va chercher toutes les photos correspondantes....

A+
0
osscour Messages postés 16 Date d'inscription lundi 23 août 2004 Statut Membre Dernière intervention 24 septembre 2004
9 sept. 2004 à 10:54
Merci pour ta réponse très claire.
Maintenant je vois mieux les différences...

Je construit un petit glossaire. C'est pourquoi j'ai opté pour le stockage des fichiers images par lettre alphabéthiques sur le disque dur.
Dans ma base je mets le nom du fichier (sans extension).

Citation:
ex sur le disque dur : images/petites/a/annee.jpg

ex dans la base : annee

Je voulais savoir si en stockant ainsi le nom de fichier dans la base sans les extensions pour économiser la taille de la base, je pourrais récupérer l'extension automatiquement en contrôlant le fichier lors des accès ?

Comme il s'agit d'un glossaire, pour le chemin d'accès je récupère la 1re lettre du mot que je met en minuscule et j'ai ainsi mon chemin

images/petites/a/annee.$extension

ce qui me manque c'est l'extension...

Vais-je gagner en stockage ce que je risque de perdre en performances ?

Vive PHP et XML
0
phpwankenobi Messages postés 152 Date d'inscription jeudi 10 avril 2003 Statut Membre Dernière intervention 18 novembre 2004
9 sept. 2004 à 17:11
La il faudrait faire des benchmarks pour savoir, mais bon dans la base tu economises 4 octets, admettons que tu aies dix millions d'images ce qui serait énorme, cela te donnerait (sauf erreur) une volumétrie d'environ 38 MégaOctets économisés ce qui peut être intéressant au niveau des sauvegardes par exemple...
Il faut donc estimer ta volumétrie et voir si cela vaut le coup de se casser la tête...

A+
0
Rejoignez-nous