JeuWeb - Crée ton jeu par navigateur
[PHP MySQL] Optimisation de statistiques et UPDATE - Version imprimable

+- JeuWeb - Crée ton jeu par navigateur (https://jeuweb.org)
+-- Forum : Discussions, Aide, Ressources... (https://jeuweb.org/forumdisplay.php?fid=38)
+--- Forum : Programmation, infrastructure (https://jeuweb.org/forumdisplay.php?fid=51)
+--- Sujet : [PHP MySQL] Optimisation de statistiques et UPDATE (/showthread.php?tid=3304)

Pages : 1 2


[PHP MySQL] Optimisation de statistiques et UPDATE - Cartman34 - 17-11-2008

Bonjour,

Je ne savais pas trop où placé ce sujet alors à déplacer si nécessaire.
Cependant, je viens vous demander conseil sur un script de calcul de points.
Ce script (IGame) a pour but de calculer les points des planètes et lunes de les enregistrer, de faire de meme pour leur somme par joueur, ainsi que de classer les joueurs par rangs(de points).
C'est un script automatique mais qui peut très bien être inséré en appel manuel.
Mon problème est que depuis qu'Igame a dépassé les 500 joueurs, le serveur subit des gros ralentissements et mon hébergeur s'en plaint (ce qui est normal).
Je suis donc en train d'optimiser fortement ce script.
Mon hébergeur m'a signalé que mon script dépassait les 200 connexions simultanées.
J'ai vérifié, mon script n'utilise qu'une seule connexion comme prévue mais il envoie un paquet de requête (2.000 à 4.000) car il sélectionne tous les joueurs, puis pour chaque joueur toutes les planètes et lunes pour mettre à jour ensuite le tout.
Après optimisation, tout est sélectionné au début en 3 requêtes mais au niveau des UPDATE le problème reste entier car je dois en faire un paquet.
Le plus simple serait de supprimer les points des planètes et lunes et de ne laisser que les totaux des joueurs mais j'aimerais proposer un peu mieux que ça à nos joueurs.

Il y a t il un moyen plus rapide de faire une masse d'UPDATE ?
Est ce que sélectionner tous les joueurs(583), les planètes (1755)et lunes(556) n'est pas trop lourd pour le serveur et surtout sa mémoire(vive ?) ?
Avez des idées et/ou d'autres solutions ?


RE: [PHP&MySQL] Optimisation de statistiques et UPDATE - Anthor - 17-11-2008

Tu peux toujours enchainer les update et n'effectuer qu'une seule requête, voir des batch de 100. Non ?


RE: [PHP&MySQL] Optimisation de statistiques et UPDATE - Cartman34 - 17-11-2008

Comment faire tous les UPDATE en une seule requête ?

J'ai vu sur un site que si je LOCK les tables, mes UPDATE sont exécutés plus rapidement si leur nombre est grand, est ce vrai ?


RE: [PHP&MySQL] Optimisation de statistiques et UPDATE - pascal - 17-11-2008

il faudrait montrer les update pour voir à quoi ils ressemblent, on peut éventuellement les factoriser ou faire plus simple... à voir avec le code.

A+

Pascal


RE: [PHP&MySQL] Optimisation de statistiques et UPDATE - Cartman34 - 17-11-2008

Voici les structures des différents UPDATE:
Planètes et lunes:
"UPDATE {{table}} SET points_bui_cur={$PlanetArr["points_bui_cur"]}, points_fle_cur={$PlanetArr["points_fle_cur"]}, points_def_cur={$PlanetArr["points_def_cur"]} WHERE id={$PlanetArr["id"]} LIMIT 1"

Joueurs:
"UPDATE {{table}} SET {$UserQuery} WHERE `id`={$RankUserID}"
Cette dernière semble simple mais $UserQuery contient une liste de 16 champs modifiés ressemblant à ceux des planètes et lunes.


RE: [PHP&MySQL] Optimisation de statistiques et UPDATE - pascal - 17-11-2008

et comment sont calculées ces variables PHP ?

A+

Pascal


RE: [PHP&MySQL] Optimisation de statistiques et UPDATE - Cartman34 - 17-11-2008

Euh...un peu vague comme question...tu veux tout le script ? Chui pas sur que ca t'aide vraiment...
Pour les points, ces variables sont la somme des points de chaque bâtiments, flottes, défenses ou recherche calculées séparément dans différentes boucles.
Quant à $RankUserID et $PlanetArr["id"], je pense que tu peux deviner.
{{table}} est remplacé par le nom de la table tout simplement...


RE: [PHP&MySQL] Optimisation de statistiques et UPDATE - pascal - 17-11-2008

je ne suis pas sûr de pouvoir aider sans voir comment sont calculés ces points.

tu peux peut être faire la somme des points par domaine et par joueur et mettre à jour tous les joueurs en une seule requête, mais sans voir le code, pas simple de deviner.

A+

Pascal


RE: [PHP&MySQL] Optimisation de statistiques et UPDATE - Nambew - 17-11-2008

Ce que Pascal essaie d'avoir de ta part, voir si c'est possible d'utiliser une seule requête SQL pour faire plusieurs UPDATE.

C'est pour ça qu'il demande plus de détails.

ex : update table SET champA = champC + champD, champB = champA - champD WHERE machin = 'bidule'


RE: [PHP&MySQL] Optimisation de statistiques et UPDATE - Cartman34 - 17-11-2008

Difficile vu que ca concerne des IDs différents....je vais pas actualiser plusieurs fois les points de la même planète et y'a un ID par planète, lune, joueur etc...
Donc Nambew, ce que tu as proposé est impossible.