Gestion des Ressources en 'temps réel' [Par Pascalr] - 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 : Gestion des Ressources en 'temps réel' [Par Pascalr] (/showthread.php?tid=158) |
Gestion des Ressources en 'temps réel' [Par Pascalr] - Kevin - 02-09-2006 Tuto By Pascalr
De nombreuse méthodes existe pour les ressources, mais la plus part n'utilisent pas correctement les possibilités de la base de données. Je vous ai donc fait un tutorial sur comment on fait pour que ce ne soit que de la base de données. Soit 3 tables production : Contient les types de production, le coef est le nombre standard de prod par 24h Code PHP :
utilisateurs : Contient les utilisateurs Code PHP :
usine : Contient les usines de production, coef est le coeficient multiplicateur de l'usine, max est la quantité max que l'usine peut faire avant d'arréter de produire (plus de place) Code PHP :
On va 1° créer 100 utilisateurs et 100 productions Code PHP :
Et on creer 100 prod pour chaque utilisateurs (100) soit 10 000 prods Code PHP :
Et oui créer 10000 lignes cela prend moins d'une seconde bon la méthode c'est de regarder combien de production sont produites depuis la dernière connexion. C'est (usine_coef*prod_coef) unité par 24h donc pour 86400 secondes Mais comme il ne se passe pas forcément 24h entre chaque calcule, le nombre de secondes entre 2 calcule c'est (CURRENT_TIMESTAMP-usine_last) Et la production c'est (usine_coef*prod_coef)*(CURRENT_TIMESTAMP-usine_last)/86400 Une disgression, MySql stoque les TIMESSTAMP bizarement, il ne stock pas le nombre de secondes, mais le nombre de jour*100000 + nombre de secondes restantes. Du coup CURRENT_TIMESTAMP-usine_last si il se passe + de 24h vas nous donner un résultat étrange. on utilise alors UNIX_TIMESTAMP()-UNIX_TIMESTAMP(usine_last) qui nous donne le vrai nombre de seconde 2° problème que faire des fractions de production. on va utiliser reste pour stocker ce qui est en cours la partie entiere pas de prob c'est TRUNCATE(calcule,0) ; La partie fractionnaire c'est MOD(calcule,86400) ; cela donne Code PHP :
On voit que la query va devenir dure à lire, c'est pourquoi en PHP on la décompose. Code PHP :
Bon faut tester le max on change juste la query en Code PHP :
Et voila, on vat tester réellement le temps si beaucoup de lignes sont anciennes Code PHP :
on vient de changer les dates avec de -0 à -19 jours (0.05s pour 10000) on relance le calcule, toujours 0.09s Je fabrique 100 000 lignes (lancer 9 fois la page de fab de prod) Ca passe 0.9 seconde Avec un million de lignes environt 10s donc pour résoudre il suffit de ne faire que les 10000 lignes les plus anciennes à chaque click Comme le order n'est possible que sur une seule table dans l'update, on change Code PHP :
et Code PHP :
Donc maintenant je met 0.18 (et oui le select dans le update est plus long) mais je mettrais toujours 0.18 secondes Amicalement, pascal [ le rédacteur si vous souhaitez faire difuser ce tutorial merci de le contacter ICI. RE: Gestion des Ressources en 'temps réel' - orditeck - 02-09-2006 L'aide pour ce tutoriel ce trouve à cette adresse : http://www.jeuweb.org/board/showthread.php?tid=258 Ce membre a eu l'autorisation de recopier ce tutoriel depuis l'ancien Forum. |