optimisation: affichage de photos : readdir ou requete sql ?

optimisation: affichage de photos : readdir ou requete sql ? - PHP - Programmation

Marsh Posté le 26-09-2011 à 18:59:57    

Bonjour,
 
Je cherche à faire un petit slideshow sur un site à partir de photos qui sont dans un dossier.
 
J'ai deux choix :
 
1- Utiliser opendir et readdir pour parcourir le dossier, et afficher les images en fonction.
+ La premiere solution présentant l'avantage de ne pas se soucier de la synchronisation des chemins dans une base.
- Plusieurs appels systèmes. Peut être lent ?
 
2- Stocker les chemins des images dans une base MySQL, et faire une requete pour aller chercher ces chemins.
+ Simple à récupérer
- Maintenance lourde et source d'erreurs
(- ?) MySQL fait-il autant d'appels systèmes qu'il y a de fichier ? ou a-t-il un cache dans sa ram ?
 
Je voudrais savoir la méthode que vous recommanderiez.
 
Je les ai testées et chronométrées toutes les deux, et j'obtiens des résultats sensiblement identiques, aux alentours de 5ms, sur ~180ms page complète
 
Qu'en pensez-vous ?
 
Merci d'avance ;)


Message édité par Pascal le nain le 26-09-2011 à 19:03:49
Reply

Marsh Posté le 26-09-2011 à 18:59:57   

Reply

Marsh Posté le 26-09-2011 à 20:06:11    

hello
ça dépend du traitement que tu en fais derrière ...
de toi à moi je serais tenté de dire "base mysql", c'est moins lourd de faire une requête qu'un appel de fichier.
après il te reste une synchro à faire pour upgrader mysql , virer les fichiers qui ont disparu et ajouter les nouveaux.


---------------
NewsletTux - outil de mailing list en PHP MySQL
Reply

Marsh Posté le 27-09-2011 à 12:02:14    

Le contenu MySQL étant sur le disque, ne fait-il pas d'appels de fichiers ?


Message édité par Pascal le nain le 27-09-2011 à 12:02:26
Reply

Marsh Posté le 27-09-2011 à 13:03:58    

oui, tu as raison, mais la base mysql est montée en ram et l'accès à la base mysql est un accès à 3 fichiers (la base, la structure et les index ou je ne sais plus) et en chargeant en ram cette base, tu as déjà implicitement le lien vers tous tes fichiers créé.
 
EDIT : maintenant si tu veux pas te casser les pieds avec une base à synchro et tu n'as "que" 100 ou 200 photos légères, un readdir peut être plus facilement exploitable pour toi, à toi de voir comboien de temps tu as pour dév et pour optimiser/maintenir.


Message édité par NewsletTux le 27-09-2011 à 13:05:19

---------------
NewsletTux - outil de mailing list en PHP MySQL
Reply

Marsh Posté le 27-09-2011 à 16:27:01    

Il n'y a aucun intérêt à utiliser une base MySQL pour ce type d'opération, un simple glob() suffira à ramener tous les fichiers nécessaires.
 
Par ailleurs, sur un système Unix, les fichiers accédés sont également mis en RAM. Entre l'analyse de la requête, son optimisation, son exécution... l'accès direct par fichier me semble plus rapide. A tester.


---------------
Directeur Technique (CTO)
Reply

Marsh Posté le 27-09-2011 à 23:14:43    

Ha, c'est intéressant comme retour ! Mais sur un serveur comme free.fr où la fonction glob est désactivée, il faut forcément passer par le readdir ou la base.
 
Après, comme je le disais plus haut, ça dépend de l'usage, s'il faut pouvoir tagger les photos, les trier, etc., une base sera plus appropriée. Si c'est "juste" pour un affichage des plus simples avec un usage pas très avancé, un readdir suffira.
 
Ce que je voulais dire avec la RAM, c'est que, corrige-moi si je me trombe, mais t'as un dossier avec X milliers de fichiers dedans, le pointeur mémoire n'est que le pointeur du dossier courant, pas les X milliers de fichiers montés en RAM, si ? Auquel cas lorsque tu voudras lire, avec un système de pagination, des milliers de fichiers, tu feras le calcul du total de fichiers, l'opération de calcul du nb de pages, de la page en cours, et la création de la liste des fichiers d'indice page Y à Page Y + nb de lignes. Et là, je pense qu'une requête mysql peut être plus appropriée, mais comme tu dis : à tester !


---------------
NewsletTux - outil de mailing list en PHP MySQL
Reply

Marsh Posté le 28-09-2011 à 00:15:54    

En fait, c'est des pages de présentation de restaurants, et sur chacune il y a un slideshow avec au maximum 3 photos.
Il ya plusieurs milliers de restaurants.
Donc mon arborescence est :
 


photos
     resto_1
          x.jpg
          y.jpg
          z.jpg
     resto_2
          x.jpg
          y.jpg
          z.jpg
     .....
 
     resto_n
          x.jpg
          y.jpg
          z.jpg


 
et moi je lui dis directement readdir(www/var/site/photo/resto_x)
 
J'ignore comment il s'y prends pour chercher le bon dossier quand on lui demande resto_x. La liste des fichiers doit etre triee, et il fait une dichotomie sur le tout. C'est pas si long au final.
 
Du cote mysql, je suis pas sur que l'id des restos soient indexes, puisque celui-ci n'est pas une cle d'indexation, car plusieurs photos pour 1 resto.
 
 :sarcastic:


Message édité par Pascal le nain le 28-09-2011 à 09:42:04
Reply

Marsh Posté le 29-09-2011 à 11:32:57    

Un appel scandir ou un appel shell et tu écris dans un fichier


---------------
Photos Panoramiques Montagnes Haute Savoie
Reply

Sujets relatifs:

Leave a Replay

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