Salut à tous,
je travaille sur un jeu de gestion assez simple. Dans un principe classique de tour par tour. Donc les joueurs pendant la journée choisissent leurs actions (quelques UPDATES pas bien méchants), et c'est la nuit que le résultat de toutes ces actions est calculé.
Pour ce gros traitement de calcul de tour, le schéma est grosso modo le suivant:
1) 4 SELECT qui récupèrent des infos pour les mettre dans des Arrays à réutiliser plus tard (données relatives aux actions que les joueurs ont pu demander, surtout).
2) 1 gros SELECT qui récupère tous les comptes, puis je boucle là dessus
3) Au sein de la boucle sur (2), je fais juste des calculs mathématiques simples et je termine avec un UPDATE qui met à jour les données du compte... donc un update par compte considéré
Au bout d'une semaine d'inactivité, les comptes sont mis en Etat=0, considérés comme en repos, et ne rentrent pas dans la grosse boucle. Ce qui fait qu'en conditions réelles, je ne pense pas atteindre des masses gigantesques de joueurs à calculer. Mais pour mes tests de montée en charge, j'ai cherché à aller loin, il me parait utile de connaître les limites de mon serveur.
Bon, en local avec Xampp, même si le traitement peut parfois être un peu long, ça passe avec plus de 200.000 comptes.
Sur un hébergement basique de Online.net, ça passe jusqu'à 50.000 comptes, mais au delà ça sèche.
Chez OVH sur un 90PLAN, ça plante très vite, impossible de calculer 10.000 comptes (la requête numéro 2 passe tres bien, d'autant qu'elle est indexée, mais pdt le bouclage, patatra).
Mon but, tout de même, est de ne lancer ce traitement qu'une fois par jour, en heure creuse (3 ou 4h du matin).
Alors ok, je suis bien conscient qu'il suffit pas de lancer un jeu pour y retrouver 10.000 joueurs en 2 semaines, la question n'est pas là. J'aimerais savoir comment vous procédez pour effectuer ce genre de gros traitement sans mettre à genoux les serveurs.
J'ai tâché d'optimiser pas mal, mais au bout d'un moment, la grosse boucle me paraît tout de même inévitable...
Merci d'avance,
a++
Feldo
je travaille sur un jeu de gestion assez simple. Dans un principe classique de tour par tour. Donc les joueurs pendant la journée choisissent leurs actions (quelques UPDATES pas bien méchants), et c'est la nuit que le résultat de toutes ces actions est calculé.
Pour ce gros traitement de calcul de tour, le schéma est grosso modo le suivant:
1) 4 SELECT qui récupèrent des infos pour les mettre dans des Arrays à réutiliser plus tard (données relatives aux actions que les joueurs ont pu demander, surtout).
2) 1 gros SELECT qui récupère tous les comptes, puis je boucle là dessus
3) Au sein de la boucle sur (2), je fais juste des calculs mathématiques simples et je termine avec un UPDATE qui met à jour les données du compte... donc un update par compte considéré
Au bout d'une semaine d'inactivité, les comptes sont mis en Etat=0, considérés comme en repos, et ne rentrent pas dans la grosse boucle. Ce qui fait qu'en conditions réelles, je ne pense pas atteindre des masses gigantesques de joueurs à calculer. Mais pour mes tests de montée en charge, j'ai cherché à aller loin, il me parait utile de connaître les limites de mon serveur.
Bon, en local avec Xampp, même si le traitement peut parfois être un peu long, ça passe avec plus de 200.000 comptes.
Sur un hébergement basique de Online.net, ça passe jusqu'à 50.000 comptes, mais au delà ça sèche.
Chez OVH sur un 90PLAN, ça plante très vite, impossible de calculer 10.000 comptes (la requête numéro 2 passe tres bien, d'autant qu'elle est indexée, mais pdt le bouclage, patatra).
Mon but, tout de même, est de ne lancer ce traitement qu'une fois par jour, en heure creuse (3 ou 4h du matin).
Alors ok, je suis bien conscient qu'il suffit pas de lancer un jeu pour y retrouver 10.000 joueurs en 2 semaines, la question n'est pas là. J'aimerais savoir comment vous procédez pour effectuer ce genre de gros traitement sans mettre à genoux les serveurs.
J'ai tâché d'optimiser pas mal, mais au bout d'un moment, la grosse boucle me paraît tout de même inévitable...
Merci d'avance,
a++
Feldo
Feldoran, aka Jeggor
Carrefour de la fiction interactive francophone
Carrefour de la fiction interactive francophone