PHP/MySQL: Comment afficher une image BLOB

PHP/MySQL: Comment afficher une image BLOB - PHP - Programmation

Marsh Posté le 18-08-2003 à 10:20:47    

Bonjour,
 
J'utilise PHP avec MySQL sous W2k avec le serveur Apache.
Quand j'essaye d'afficher une image enregistrée dans un BLOB, j'obtient le code de l'image plutôt que l'image elle même.
Je n'ai pas de code à proposer puisque j'ai fait l'essai avec DreamWeaverMX. Dans les FAQ DreamweaverMX, il est dit que celui-ci ne supporte pas l'affichage des images à partir d'un BLOB (ils préconisent d'enregistrer le nom du fichier dans la base et mettre l'image en dehors, à quoi sert la base alors?).
 
Pouvez-vous me conseiller (bout de code, autre,...)?

Reply

Marsh Posté le 18-08-2003 à 10:20:47   

Reply

Marsh Posté le 18-08-2003 à 10:24:31    

Tu l'affiches comment l'image ? Il manque peut-être juste un content-type
header('content-type: image/jpeg');
ou un truc du genre


---------------
mes programmes ·· les voitures dans les films ·· apprenez à écrire
Reply

Marsh Posté le 18-08-2003 à 10:26:21    

Ben la base te sert à gérer tes références aux images...
 
Et le fait de stocker tes images à l'extérieur est effectivement une meilleure chose (à mon goût) : ça te boufferait de la place inutilement dans ta BDD, plus de soucis en cas de migration, etc.
 
[mode exemple à la con ON]
Si tu fais un annuaire de sites, tu gères les liens vers les sites, tu stockes pas les sites dans ta base, et pourtant tu as bien besoin d'une BDD.
[mode exemple à la con OFF]
 
C'est en gros le même principe pour les images.

Reply

Marsh Posté le 18-08-2003 à 10:31:42    

+1 ....
y'a rien de plus con que de stocker des images dans une bdd ....
tu te rends compte de la taille qu'elle pourrait avoir rapidement  :o  
je conseille aussi le stockage dans un repp approprié + reference dans la base  [:volta]


---------------
from here and there -- \o__________________________________ -- la révolution de la terre, en silence
Reply

Marsh Posté le 18-08-2003 à 10:34:47    

Je pense au contraire que la base doit stocker les images (le meilleur exemple est ce forum). D'un point de vue manipulation/automatisation cette solution est excellente.
 
Concernant header('content-type: image/jpeg'); il me semble que j'avais déjà essayé, je vais vérifier.
 

Reply

Marsh Posté le 18-08-2003 à 10:36:44    

monnoliv a écrit :

Je pense au contraire que la base doit stocker les images (le meilleur exemple est ce forum).  


 
 :lol: .... c'est ca ouais .....  
les images doivent être stockées dans la base ....[:ddr555]  
et les messages en fichier texte... :sarcastic:


---------------
from here and there -- \o__________________________________ -- la révolution de la terre, en silence
Reply

Marsh Posté le 18-08-2003 à 11:07:16    

Bon, à part rigoler, qui peut répondre à ce problème ?

Reply

Marsh Posté le 18-08-2003 à 11:10:43    

bah revérifie déjà ton header, si ça affiche le contenu de l'image au lieu d'afficher l'image je vois pas trop ce que ça pourrait être d'autre
 
Et t'as toujours pas dit comment t'affichais l'image :o


---------------
mes programmes ·· les voitures dans les films ·· apprenez à écrire
Reply

Marsh Posté le 18-08-2003 à 13:02:46    

Ok, je te réponds ce soir ou demain.

Reply

Marsh Posté le 18-08-2003 à 17:43:59    

En attendant, pour répondre au petit rigolo (simogeo), voici un lien utile concernant l'implémentation de BLOB dans une DB:
http://www.microsoft.com/technet/t [...] /c1161.asp
La page explique, entre-autre, qu'un lien est créé (dans la DB) à la place du BLOB si celui-ci est trop grand (Je suppose que MySQL procède à peut près de même). Avoir une DB de 10GB avec image n'est pas forcément plus mauvais qu'en avoir une de 10Mb sans image mais avec liens (bonjour la maintenance des liens).
Je pense que cela doit se discuter au cas par cas mais ce qui est effectivement sûr, c'est qu'un champ de longueur fixe sera plus rapide qu'un autre de taille variable.

Reply

Marsh Posté le 18-08-2003 à 17:43:59   

Reply

Marsh Posté le 18-08-2003 à 17:53:42    

monnoliv a écrit :

En attendant, pour répondre au petit rigolo (simogeo), voici un lien utile concernant l'implémentation de BLOB dans une DB:
http://www.microsoft.com/technet/t [...] /c1161.asp
La page explique, entre-autre, qu'un lien est créé (dans la DB) à la place du BLOB si celui-ci est trop grand (Je suppose que MySQL procède à peut près de même). Avoir une DB de 10GB avec image n'est pas forcément plus mauvais qu'en avoir une de 10Mb sans image mais avec liens (bonjour la maintenance des liens).
Je pense que cela doit se discuter au cas par cas mais ce qui est effectivement sûr, c'est qu'un champ de longueur fixe sera plus rapide qu'un autre de taille variable.


 
C'est toi le rigolo. Et ce n'est aucunement parce que tu defends le fait de mettre des images dans la BDD ce qui peut se defendre (meme si moi je le ferais pas), mais parce que tu parles sans savoir en disant :

Citation :

le meilleur exemple est ce forum


Reply

Marsh Posté le 18-08-2003 à 17:59:10    

Autant pour moi,
Je pensais de bonne foi que pour 10Ko max d'image par utilisateur (genre smileys et autres brols) cela valait la peine de les intégrer dans la DB.
A priori, moi, je l'aurais fait.

Reply

Marsh Posté le 18-08-2003 à 18:04:31    

monnoliv a écrit :

Autant pour moi,
Je pensais de bonne foi que pour 10Ko max d'image par utilisateur (genre smileys et autres brols) cela valait la peine de les intégrer dans la DB.
A priori, moi, je l'aurais fait.


 
Encore une fois, je ne dis pas que c'est forcement une mauvaise solution, je dis juste que je ne le ferais pas et qu'apparemment, bcp ici pensent la meme chose que moi.
Il me semble plus intelligent de faire un rep. pour les images et un bout de script qui fait un dir sur le rep pour mettre a jour les liens dans la BDD (dans le cas de smileys proposes pour un forum par exemple).

Reply

Marsh Posté le 18-08-2003 à 18:51:48    

monnoliv a écrit :

En attendant, pour répondre au petit rigolo (simogeo)


cai moi [:dawa]
 
 

monnoliv a écrit :


http://www.microsoft.com/technet/t [...] /c1161.asp
La page explique, entre-autre, qu'un lien est créé (dans la DB) à la place du BLOB si celui-ci est trop grand (Je suppose que MySQL procède à peut près de même).


http://www.mysql.com/doc/fr/BLOB.html ... voilà pour ce qui est de la doc MySQL ....
(quand je fais du PHP, je ne me sers pas de la doc VB  :sarcastic: )
tu remarqueras qu'il ne parle pas de la création automatique de lien lors de l'explosion dudit-champ...
 
 

monnoliv a écrit :

Avoir une DB de 10GB avec image n'est pas forcément plus mauvais qu'en avoir une de 10Mb sans image mais avec liens (bonjour la maintenance des liens).


[:mlc2]
stocker un lien vers un dossier dans un varchar(255) -maximum  ;)  et stocker des images ne revient pas vraiment au même... Sachant qu'on peut le faire autrement moi j'appelle ca de la surcharge ....:/
un serveur SQL sollicité c'est un serveur qui peut être amener un ramer.... [:spamafote]  
 
pour ce qui est de la maintenance des liens .... ca dépend de ton code .... moi je l'ai déjà mis en place .. ca tourne sans problème et j'ai pas de difficulté a le maintenir.  :sarcastic:  
 
 

monnoliv a écrit :

Je pense que cela doit se discuter au cas par cas mais ce qui est effectivement sûr, c'est qu'un champ de longueur fixe sera plus rapide qu'un autre de taille variable.


dans quel ca tu as un champs fixe ? en type BLOB ?  :heink:  
 
ps: tu fais ce que tu veux... moi j'en ai rien a foutre de ton appli ..... une dernière mise en garde toutefois si tu as fait le choix definitif du stockage en bdd et que tu es sur un serveur mutualisé ... saches que certains imposent des limites à la taille de la bdd  ;)


Message édité par simogeo le 18-08-2003 à 18:53:16

---------------
from here and there -- \o__________________________________ -- la révolution de la terre, en silence
Reply

Marsh Posté le 18-08-2003 à 20:56:52    

-----------------
http://www.mysql.com/doc/fr/BLOB.html ... voilà pour ce qui est de la doc MySQL ....
(quand je fais du PHP, je ne me sers pas de la doc VB  :sarcastic: )  
-----------------
Allons, faut pas être de mauvaise foi, on s'en fout du VB, sur ce lien, il y a un diagramme expliquant la structure de stockage d'un BLOB dans leur DB.
 
 
-----------------
stocker un lien vers un dossier dans un varchar(255) -maximum  ;)  et stocker des images ne revient pas vraiment au même...  
-----------------
Evidemment.
 
 
-----------------
un serveur SQL sollicité c'est un serveur qui peut être amener un ramer....
-----------------
C'est vrai dans les deux cas (avec et sans images)
 
 
-----------------
pour ce qui est de la maintenance des liens .... ca dépend de ton code .... moi je l'ai déjà mis en place .. ca tourne sans problème et j'ai pas de difficulté a le maintenir.  :sarcastic:  
-----------------
Bien sûr... on ne compte plus les pages où, à la place de voir apparaître une image, on ne reçoit qu'un petit icône misérable nous informant qu'effectivement, on aurait dû en avoir une :-)
 
 
------------------
dans quel ca tu as un champs fixe ? en type BLOB ?  :heink:  
------------------
varchar(255), non ?
 
 
------------------
ps: tu fais ce que tu veux... moi j'en ai rien a foutre de ton appli .....  
------------------
Voilà bien le langage qu'on ne trouve pas (ou peu) dans les forums anglo-saxon.
 
 
------------------
une dernière mise en garde toutefois si tu as fait le choix definitif du stockage en bdd et que tu es sur un serveur mutualisé ... saches que certains imposent des limites à la taille de la bdd  ;)
------------------
Je n'ai fait aucun choix, je suis venu dans ce forum poser une simple question. Tu m'as ri au nez, merci mais c'est pas ce que j'attendais (même si j'ai fais une erreur d'appréciation sur le stockage d'image).

Reply

Marsh Posté le 18-08-2003 à 21:13:29    

je t'ai d'abord donné mon avis sur la question  [:spamafote].
tu essayes de me démontrer le contraire avec un contre-exemple.... :sweat: .... bien évidemment je rigole.  ;)  (toutefois sans mechanceté). Et tu reviens sur le topik en m'appelant le petit rigolo et avec des arguments qui ne sont toujours pas très convaincants à mon sens.
 
Le langage 'non-anglo-saxon compliant' n'est pas insulte.... envers toi ... c'est en guise d'une sincerité dans mes propos.
 
ps : si je peux t'aider je le ferais encore  :)  
 
 
pour reprendre tes propos :
 

Allons, faut pas être de mauvaise foi, on s'en fout du VB, sur ce lien, il y a un diagramme expliquant la structure de stockage d'un BLOB dans leur DB.


oui mais MySQl ne fonctionne pas de la même façon.
 

C'est vrai dans les deux cas (avec et sans images)


dans les 2 cas ils sont sollicités mais on ne lui demande pas le même effort
 

Bien sûr... on ne compte plus les pages où, à la place de voir apparaître une image, on ne reçoit qu'un petit icône misérable nous informant qu'effectivement, on aurait dû en avoir une :-)


il est tiré par les cheveux cet argument quand même [:linuxine]... limite mauvaise foi  :whistle:  
 

Code :
  1. varchar(255), non ?


oui ..... il est possible de stocker le lien dans un varchar(30) aussi pour gagner encore quelques octets


---------------
from here and there -- \o__________________________________ -- la révolution de la terre, en silence
Reply

Marsh Posté le 19-08-2003 à 09:54:15    

Ok, j'ai résolu mon pb. C'était effectivement un problème de header. En fait Dreamweaver m'a causé + de soucis qu'il en a résolu. Le problème avec ces softs, c'est qu'on ne maîtrise pas le code.
Merci et à bientôt,

Reply

Marsh Posté le 19-08-2003 à 12:18:42    

monnoliv a écrit :

Ok, j'ai résolu mon pb. C'était effectivement un problème de header. En fait Dreamweaver m'a causé + de soucis qu'il en a résolu. Le problème avec ces softs, c'est qu'on ne maîtrise pas le code.
Merci et à bientôt,

Veux faire le malin en essayant de nous faire comprendre que stocker une image dans la BDD caiplusmieu et il code avec DW... :lol: [:rofl] [:rofl2]

Reply

Marsh Posté le 04-09-2003 à 20:19:57    

Je suis désolé, les "petits rigolos" (;)) ne m'ont pas encore convaincu...
Vous dites "ça alourdi la base". Et alors ? Que l'image soit dans un répertoire ou dans la base, ça bouffe de l'espace pareillement ! Et ça m'étonnerait grandement que la vitesse d'exécution en pâtisse bc...
Je trouve ça vraiment "sale" de stoker un lien vers un fichier qui n'a aucun rapport. Je fais comme ça depuis longuement et ça m'a toujours dérangé.
 
A vous...

Reply

Marsh Posté le 04-09-2003 à 21:34:46    

Excusez moi j'ai suivi le topic car le sujet m'intéresse mais je n'ai pas encore lu d'arguments qui expliquent pourquoi ce n'est pas bien de stocker de gros objets dans labase. La question m'intéresse c'est pour cela que je relance.  
 

Reply

Marsh Posté le 04-09-2003 à 21:59:47    

chaica a écrit :

Excusez moi j'ai suivi le topic car le sujet m'intéresse mais je n'ai pas encore lu d'arguments qui expliquent pourquoi ce n'est pas bien de stocker de gros objets dans labase. La question m'intéresse c'est pour cela que je relance.  


Pour reprendre l'exemple d'un serveur mutualisé (ou par exemple t'as 20Mo de données MySQL et 50Mo de données pour les fichiers) tu vois tout de suite qu'il vaut mieux stoquer les images hors de la base et garder la base pour les données variables (par exemple les messages d'un forum).
 
D'autre part, quand on dit que ca alourdit la base : si à chaque appel d'un smiley tu dois aller faire une lecture de la base, générer l'image puis la transmettre, ton serveur il souffre. Alors que si tu stoques l'image en tant qu'image dans un repertoire, le serveur n'a plus que la partie envoi du fichier à faire [:spamafote]


---------------
Le topic des plongeurs  |  Le topic du routeur D-Link DSL-604+
Reply

Marsh Posté le 05-09-2003 à 00:21:06    

Plusieurs choses :  
 
- Pourquoi veux tu stocker des images dans une BDD (des images générées en PHP, a la limite mais sinon .... je vois pas trop l'intéret), et puis ca doit etre chiant a mettre en place une BDD comme ca. Comme on te l'a dit, stocke plutot le nom des images (ca reviendra a peu pres au meme)
 
- N'utilise pas Dreamweaver MX pour tout ce qui est PHP-SQL.
DW, c'est bon pour créer des pages Web en HTML pour les débutants qui veulent faire des trucs jolis (et encore des fois, faut reprendre le code) mais pour le php-SQL, rien ne vaut un bon viel éditeur de texte (Jedit, UltraEdit ...)
Ou alors tu créé ton interface sous DW puis l'édite après.

Reply

Marsh Posté le 05-09-2003 à 01:17:25    

benj9002 a écrit :


Pour reprendre l'exemple d'un serveur mutualisé (ou par exemple t'as 20Mo de données MySQL et 50Mo de données pour les fichiers) tu vois tout de suite qu'il vaut mieux stoquer les images hors de la base et garder la base pour les données variables (par exemple les messages d'un forum).
 
D'autre part, quand on dit que ca alourdit la base : si à chaque appel d'un smiley tu dois aller faire une lecture de la base, générer l'image puis la transmettre, ton serveur il souffre. Alors que si tu stoques l'image en tant qu'image dans un repertoire, le serveur n'a plus que la partie envoi du fichier à faire [:spamafote]  

Effectivement, pour un smilley c'est plutôt stupide. Mais par exemple, tu publies un article avec des images pour l'illustrer. Il te faut deux tables ("articles" et "images" ) reliées par leurs ID. Je trouve infiniment plus propre que l'image soit stoquer dans la table images, plutôt que stoquée dans un répertoire qui n'a rien à voir et qui, de plus, est commun à toutes les images stoquées dans la table. C'est juste une question de cohérence...
 
Et question performance, je ne suis pas sur que ce soit dramatique d'afficher une image stoquée dans la base, plutôt que d'extraire son nom et de l'afficher ensuite.

Reply

Marsh Posté le 05-09-2003 à 10:48:05    

Kalex a écrit :

Effectivement, pour un smilley c'est plutôt stupide. Mais par exemple, tu publies un article avec des images pour l'illustrer. Il te faut deux tables ("articles" et "images" ) reliées par leurs ID. Je trouve infiniment plus propre que l'image soit stoquer dans la table images, plutôt que stoquée dans un répertoire qui n'a rien à voir et qui, de plus, est commun à toutes les images stoquées dans la table. C'est juste une question de cohérence...


Tu peux très bien faire un repertoire pour chaque article et comme ça tu gardes toutes les images de l'article ensemble te séparément des autres. [:spamafote]  
 

Kalex a écrit :


Et question performance, je ne suis pas sur que ce soit dramatique d'afficher une image stoquée dans la base, plutôt que d'extraire son nom et de l'afficher ensuite.


Ca serait à essayer ... je pense le contraire de toi mais bon ;) S'il y a 10 visiteurs en même temps qui consultent des articles, ta base va devoir sortir 10*10ko pour les images au lieu de 10*5 octets pour les adresses et là ça va faire mal.


---------------
Le topic des plongeurs  |  Le topic du routeur D-Link DSL-604+
Reply

Marsh Posté le 05-09-2003 à 10:58:11    

Yo c Spi a écrit :

- Pourquoi veux tu stocker des images dans une BDD (des images générées en PHP, a la limite mais sinon .... je vois pas trop l'intéret), et puis ca doit etre chiant a mettre en place une BDD comme ca. Comme on te l'a dit, stocke plutot le nom des images (ca reviendra a peu pres au meme)


 
monnoliv : Pourrai t'on savoir s'il te plait, tout le monde émet des hypothèses sur l'utilisation d'une telle pratique, mais pour toi c'est quoi ?
Up  :bounce:

Reply

Marsh Posté le 05-09-2003 à 13:51:33    

benj9002 a écrit :


Tu peux très bien faire un repertoire pour chaque article et comme ça tu gardes toutes les images de l'article ensemble te séparément des autres. [:spamafote]  
...

Certes, mais tu as bien compris ce que je veux dire. Un répertoire, quel qu'il soit (même avec l'ID de l'article en nom) n'est relié en rien à une table dans une bdd.
Enfin bon, je défends un système qui je n'utilise pas moi-même mais que je trouve tout de même très cohérent. ;)
 
Je coderais bien un petit exemple pour tester les performances, mais là je suis sur un portable avec Windows XP et je suis un peux perdu sans mes outils Unix. :D

Reply

Marsh Posté le 05-09-2003 à 14:04:39    

Kalex a écrit :

Certes, mais tu as bien compris ce que je veux dire. Un répertoire, quel qu'il soit (même avec l'ID de l'article en nom) n'est relié en rien à une table dans une bdd.
Enfin bon, je défends un système qui je n'utilise pas moi-même mais que je trouve tout de même très cohérent. ;)


 
Je comprends pas trop le problème que l'image ne soit pas directement reliée à la base :/ Si le site est bien fait ca devrait pas géner [:spamafote]  
 
N'empèche, ce système peut etre intéressant dans le cas d'un serveur dédié où on a pas de limitation dans la taille de la base de données (sinon c'est pas viable).


---------------
Le topic des plongeurs  |  Le topic du routeur D-Link DSL-604+
Reply

Marsh Posté le 05-09-2003 à 15:34:55    

benj9002 a écrit :


 
Je comprends pas trop le problème que l'image ne soit pas directement reliée à la base :/ Si le site est bien fait ca devrait pas géner [:spamafote]  
 
N'empèche, ce système peut etre intéressant dans le cas d'un serveur dédié où on a pas de limitation dans la taille de la base de données (sinon c'est pas viable).

Exemple d'incohérence : lorsque tu affiches une image que tu ne connais que pas son ID. Comment tu fais pour l'afficher si elle n'est pas dans la table ?
Tu crées une page PHP  (adresse : chezmoi.com/img.php?id=7) renvoyant du code HTML avec un tag img.
 
Alors que si l'image est stoquer dans la base, tu l'affiches direct.
 
A un moment j'avais essayer d'afficher l'image d'après l'adresse avec un fopen, c'était déja moins incohérent (du coté client).
 
J'ai fait un petit code trés simpliste, si quelqu'un pouvait tester les performances :
insert_img.php

Code :
  1. <?
  2. // $nom et la variable contenant le nom de l'image (déjà stoquer sur le serveur).
  3. $connect = mysql_pconnect('localhost');
  4. mysql_select_db ('mabase', $connect);
  5. /*
  6. Code pour créer la table :
  7. create table test_img(id int auto_increment, data LONGBLOB, primary key(id));
  8. */
  9. $pfile = fopen($nom, "rb" );
  10. $size = filesize($nom);
  11. $file = fread($pfile, $size);
  12. $file = addslashes($file);
  13. $command = "INSERT INTO test_img(data) VALUES(\"$file\" )";
  14. mysql_query($command, $connect);?>


 
img_sql.php

Code :
  1. <?
  2. // $id est l'ID de l'image stoquée dans la base.
  3. $connect = mysql_pconnect('localhost');
  4. mysql_select_db ('mabase', $connect);
  5. $command = "SELECT * FROM test_img WHERE id = $id";
  6. $result = mysql_query($command, $connect);
  7. $array = mysql_fetch_array($result);
  8. header("Content-type: image/jpeg" );
  9. echo $array[data];
  10. ?>


 
img.php

Code :
  1. <?
  2. $connect = mysql_pconnect('localhost');
  3. mysql_select_db ('ma_base', $connect);
  4. */
  5. Code sql pour créer la table :
  6. create table test_img_adress(id int auto_increment, adress varchar(55), primary key(id));
  7. */
  8. $command = "SELECT * FROM test_img_adress WHERE id = 2";
  9. $result = mysql_query($command, $connect);
  10. $array = mysql_fetch_array($result);
  11. echo "<!DOCTYPE HTML PUBLIC '-//W3C//DTD HTML 4.01 Transitional//FR'>
  12. <html>
  13. <head>
  14. <title>$array[adress]</title>
  15. <meta http-equiv='Content-Type' content='text/html; charset=iso-8859-1'>
  16. </head>
  17. <body>
  18. <img src='$array[adress]' alt='image'>
  19. </body>
  20. </html>";
  21. ?>

Reply

Marsh Posté le 05-09-2003 à 16:54:05    

Perso je nomme simplement le nom de l'image selon l'ID de la bdd. Je vois pas ou est le problème.
 
Mais à mon avis, mettre les images dans la base est une très mauvaise idée.

Reply

Marsh Posté le 05-09-2003 à 21:52:32    

chaica a écrit :

Excusez moi j'ai suivi le topic car le sujet m'intéresse mais je n'ai pas encore lu d'arguments qui expliquent pourquoi ce n'est pas bien de stocker de gros objets dans labase. La question m'intéresse c'est pour cela que je relance.  
 
 

Un exemple simple :
une base de donnée avec des images de 600 ko stockés dedans
une serveur web avec php qui utilise cette base de donnée.
t'as une personne qui a besoin d'une image : le navigateur envoie la demande au serveur, le serveur envoie la demande au serveur sql et il doit attendre la réponse.
avec un réseau à 10Mb, il faut 0.5 secondes par images. Si le navigateurs a besoin d'une disaines d'images, ca méttra 5 secondes pour revenir (en considérant que toutes les images sont demandé au même moment).
Avec 6 personnes qui ont besoin des mêmes images en même temps on tombe à trente secondes pour que tout soit envoyé au navigateur.
 
Une personne de plus et on tombes a trente seconde d'exécution (ou plustôt d'attente d'infos) et 10 images qui seront jamais envoyé (time out du script php).
 
Là, on en est à 70 images demandés à la fois et on a déjà des problèmes. Je te laisses imaginer ce que ca va donner quand la demande sera plus forte. ;)
 
Evidemment, pour un tout petit site ca posera pas de problème, mais pour un site comme hardware.fr je penses que les premiers jours après la publication d'un article, ca serait l'horreur pour accéder aux images avec un tel système. ;)

Reply

Marsh Posté le 06-09-2003 à 03:19:54    

omega2 a écrit :

Un exemple simple :
une base de donnée avec des images de 600 ko stockés dedans
une serveur web avec php qui utilise cette base de donnée.
t'as une personne qui a besoin d'une image : le navigateur envoie la demande au serveur, le serveur envoie la demande au serveur sql et il doit attendre la réponse.
avec un réseau à 10Mb, il faut 0.5 secondes par images. Si le navigateurs a besoin d'une disaines d'images, ca méttra 5 secondes pour revenir (en considérant que toutes les images sont demandé au même moment).
Avec 6 personnes qui ont besoin des mêmes images en même temps on tombe à trente secondes pour que tout soit envoyé au navigateur.
 
Une personne de plus et on tombes a trente seconde d'exécution (ou plustôt d'attente d'infos) et 10 images qui seront jamais envoyé (time out du script php).
 
Là, on en est à 70 images demandés à la fois et on a déjà des problèmes. Je te laisses imaginer ce que ca va donner quand la demande sera plus forte. ;)
 
Evidemment, pour un tout petit site ca posera pas de problème, mais pour un site comme hardware.fr je penses que les premiers jours après la publication d'un article, ca serait l'horreur pour accéder aux images avec un tel système. ;)


 
Toi c'est ca qui se passe :
client web>serveur web>bdd>serveur web>client web
 
mais avec un lien dans la base il faudra :
client web>serveur web>bdd>serveur web avec accès disque pour récupérer les images>client web.
 
Avec un temps d'accès disque pour chacune des images. Donc je vois pas encore une différence flagrante.

Reply

Marsh Posté le 06-09-2003 à 12:29:01    

fais des tests à mon avis c'est assez flagrant.


---------------
What if I were smiling and running into your arms? Would you see then what I see now?  
Reply

Marsh Posté le 06-09-2003 à 13:12:07    

Ben théoriquement un accès à la bdd est plus rapide qu'un accès disque donc le problème doit être autre part.

Reply

Marsh Posté le 06-09-2003 à 13:17:02    

Citation :

Ben théoriquement un accès à la bdd est plus rapide qu'un accès disque donc le problème doit être autre part.


 
 
ça dépend de la montée en charge. Ce sujet est stérile. Personne ne sait pkoi apparement  ;) , mais tout le monde, ou presque, est du même avis...
 
 
http://dev.nexen.net/news/gen.php3 [...] 1,0,0.html
A notter qu'il est plutot conseillé de ne stocker en base que le chemin vers l'image et de stocker celle-ci "normalement" sur le serveur.
 
 
http://www.phpindex.com/articles/a [...] lement=208
Le stockage des images d'un site web dynamique pose souvent problème. Faut-il enregistrer l'image dans la base de données ou bien simplement le chemin vers le fichier ?
 
Jérôme Morlon nous présente le problème et donne en quelques lignes de code les deux solutions. Quoi qu'il arrive, stocker l'image dans la base MySQL nécessite beaucoup, beaucoup plus de ressources et peut-être aussi plus d'espace disque. J. Morlon nous parle aussi de la possibilité de faire des recherches dans la base de données sur "des formes au sein des images". J'aimerai beaucoup avoir plus d'information là dessus.  
 
Il y a par contre un gros intérêt avec les images stockées sur le disque dans l'arborescence web, en plus du gain de rapidité, c'est la possibilité d'utiliser la mémoire cache de votre navigateur. Il n'est pas prouvé que les navigateurs ne rechargent pas les images déjà chargées qui sont stockées en base de données. Ce serait une surcharge supplémentaire pour la première solution.
 
Attention, cet article s'adresse plutôt aux débutants.


Message édité par jagstang le 06-09-2003 à 13:17:54

---------------
What if I were smiling and running into your arms? Would you see then what I see now?  
Reply

Marsh Posté le 06-09-2003 à 13:22:54    

chaica a écrit :

Ben théoriquement un accès à la bdd est plus rapide qu'un accès disque donc le problème doit être autre part.

et la bdd,elle est ou?sur un disc dur non?  :whistle:


---------------
lecteur mp3 yvele's smilies jeux de fille
Reply

Marsh Posté le 06-09-2003 à 13:58:16    

omega2 a écrit :

Un exemple simple :
une base de donnée avec des images de 600 ko stockés dedans
une serveur web avec php qui utilise cette base de donnée.
t'as une personne qui a besoin d'une image : le navigateur envoie la demande au serveur, le serveur envoie la demande au serveur sql et il doit attendre la réponse.
avec un réseau à 10Mb, il faut 0.5 secondes par images. Si le navigateurs a besoin d'une disaines d'images, ca méttra 5 secondes pour revenir (en considérant que toutes les images sont demandé au même moment).
Avec 6 personnes qui ont besoin des mêmes images en même temps on tombe à trente secondes pour que tout soit envoyé au navigateur.
 
Une personne de plus et on tombes a trente seconde d'exécution (ou plustôt d'attente d'infos) et 10 images qui seront jamais envoyé (time out du script php).
 
Là, on en est à 70 images demandés à la fois et on a déjà des problèmes. Je te laisses imaginer ce que ca va donner quand la demande sera plus forte. ;)
 
Evidemment, pour un tout petit site ca posera pas de problème, mais pour un site comme hardware.fr je penses que les premiers jours après la publication d'un article, ca serait l'horreur pour accéder aux images avec un tel système. ;)

J'ai peur de mal comprendre... Tu nous parles de problèmes de bande passante ?!!  :heink:  
C'est sûr que lorsque tu as une base de donnée reliée au serveur par un réseau 10 Mb c'est une solution à éviter !!!
 
Sinon, je viens de vérifier IE et Mozilla savent mettre en cache les images provenant d'un bdd (je ne vois pas pourquoi ils ne le pourraient pas...).
 
Mais bon, je répète que je suis séduit par ce système uniquement pour des raisons de cohérence, je veux bien croire qu'il est moins rapide. Et puis, y pas que les sites web dans la vie d'une bdd. :)

Reply

Marsh Posté le 06-09-2003 à 14:02:27    

Comme tu veux. Au moins tu es au courant  ;)


---------------
What if I were smiling and running into your arms? Would you see then what I see now?  
Reply

Marsh Posté le 06-09-2003 à 16:07:39    

JagStang a écrit :

Comme tu veux. Au moins tu es au courant  ;)  

Si je me plante, ça sera vot' faute. :cry:  
 
;)

Reply

Marsh Posté le 06-09-2003 à 20:43:50    

chaica a écrit :


 
Toi c'est ca qui se passe :
client web>serveur web>bdd>serveur web>client web
 
mais avec un lien dans la base il faudra :
client web>serveur web>bdd>serveur web avec accès disque pour récupérer les images>client web.
 
Avec un temps d'accès disque pour chacune des images. Donc je vois pas encore une différence flagrante.  

Et la base de donne, elle stocke continuellement toutes les images dans la mémoire vive de l'ordi au détriment des autres infos de la base?
A mon avis, dans les deux cas, il y a autant d'accés disque. (les serveur web aussi conservent un certain nombre d'info en mémoire vive pour gain de temps.)

Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed