Bonjour !
Alors, j'ai actuellement des difficultés pour trouver la bonne solution à mon problème.Tout d'abord, voilà le problème.
J'ai une base de donnée MySQL, contenant un forum, ainsi que trois autres tables : fdp_character, fdp_characterskills, fdp_skills.
Chaque personnage, stocké dans la table fdp_character a une id qui lui est propre, un niveau etc .. ainsi que l'ID du skill qu'il apprend ( le learning_skill ).
Les skills de chaque personnages, sont stockés dans la table fdp_characterskills, et contiennent : une id ( autoincrementée ), l'id du personnage, l'id du skill, le niveau du skill, l'expérience accumulé pour ce skill.
Enfin, j'ai ma table fdp_skills, qui donne les définitions d'un skill ( id, nom, description, expérience requise pour avoir un niveau en plus ).
Et enfin, arrive mon système qui permet une cohésion entre ces trois tables, c'est à dire, le système qui gère l'expérience, la montée de niveau, des personnages et des compétences :
En premier lieu, le script ajoute X points d'expérience au personnage, puis vérifie que l'expérience accumulée par le personnage est supérieure ou égale à l'expérience nécessaire pour passer un niveau, si l'expérience est acquise, on ajoute un niveau.
Ensuite, il vérifie que le learning_skill du personnage est > 0. Si c'est le cas, il ajoute Y points d'xp à la compétence, puis récupère la définition du skill ( qui a pour id learning_skill ) dans la table fdp_skills, ainsi que la ligne correspondant au skill ( d'id learning_skill, et qui a pour character_id, l'id du personnage ), et vérifie que l'xp accumulée > l'xp requise. Si oui, il ajoute un niveau, sinon, il ne fait rien.
Ce système, est lourd, et est cronné afin d'être effectué une fois par heure, pour tous les personnages.
Le problème, c'est que j'aimerai faire un système d'expérience en temps réel. C'est à dire, un script, qui ajoute chaque secondes, ou toutes les 10 secondes, les points d'expérience, et vérifie si le niveau du personnage ou d'une compétence est augmentée, puis appelle un autre script si c'est justement le cas, avec l'id du personnage.
Cependant, je ne sais pas du tout comment m'y prendre, pour ne pas faire un script lourd et chiant. Pour l'instant, j'ai pensé à une requête UPDATE, d'incrémentation, qui ajoute +X à l'xp chaque seconde, puis enfin, une requête SELECT qui vérifie que l'xp acquis > xp requis, et envoi à une fonction, ou à un autre script, l'id du personnage à vérifier.
Mais, ça reviendrait à environ 172800 requêtes à la journée, ( 2 à la seconde ), en plus des requêtes venant du forum, et d'autres applications web lourdes ( Wiki etc .. ).
Ma question : Est-il possible d'optimiser cette idée, afin d'arriver à un minimum de requête pour un maximum d'efficacité ?
( Merci aux courageux qui me liront jusqu'au bout, et me répondront. )
Cordialement,
Aymeric
Partager