28-03-2017, 12:10 AM
Bonsoir,
Je rencontre un soucis... Facile à développer mais la meilleure solution pour flinger mon serveur...
En gros, j'ai une table qui pourra contenir (sur le moyen terme) des millions de lignes... Chaque colonne contiendra en majorité des données de type INT (int, tinyint, ...)
Dans mon code PHP, je fais un calcul pour savoir si toutes les populations (Au nombre de 3 types différents) ont reçues leur nourriture (il y en a 10 différentes). Si toutes les populations ont reçues leur nourriture, le moral augmente individuellement de 20% s'il y a une population qui n'a pas reçue au moins une nourriture elle perd individuellement 20%
EXEMPLE :
Mes trois types de populations (et leur nombre) sont : 100 serfs, 50 artisans, 10 bourgeois
Les ressources différentes : blé, viande, pain, peau, etc....
Je vérifie donc pour chaque ressource si j'arrive à nourrir les 100 serfs, puis les 50 artisans puis les 10 bourgeois
Si j'arrive à tous les nourrires j'augmente individuellement de 20% leur moral
Si je n'arrive à nourrir que 80 serfs en blé = 20% à tous les serfs que j'aurais nouris
et les 20 serfs restant verront leur moral baissé de 20%
et ce, à chaque ressource et sur chaque type de la population.
(les populations qui se verront augmenter et baisser de 20% sont choisis aléatoirement, je ne vous parle pas du gouffre avec la fonction RAND...).
Je ne sais pas comment arriver à optimiser à sachant que ça ferait au total 100*10+50*10+10*10 = 1600 requêtes UPDATE pour un seul joueur dans cet exemple...
Je ne pense pas qu'il soit possible de faire comme les INSERT INTO en les regroupant tous et exécuter qu'une seule fois la requête...
Je vous mets un bout de code au caou si vous n'arrivez pas à comprendre ce que je veux dire...
Merci d'avance
Je rencontre un soucis... Facile à développer mais la meilleure solution pour flinger mon serveur...
En gros, j'ai une table qui pourra contenir (sur le moyen terme) des millions de lignes... Chaque colonne contiendra en majorité des données de type INT (int, tinyint, ...)
Dans mon code PHP, je fais un calcul pour savoir si toutes les populations (Au nombre de 3 types différents) ont reçues leur nourriture (il y en a 10 différentes). Si toutes les populations ont reçues leur nourriture, le moral augmente individuellement de 20% s'il y a une population qui n'a pas reçue au moins une nourriture elle perd individuellement 20%
EXEMPLE :
Mes trois types de populations (et leur nombre) sont : 100 serfs, 50 artisans, 10 bourgeois
Les ressources différentes : blé, viande, pain, peau, etc....
Je vérifie donc pour chaque ressource si j'arrive à nourrir les 100 serfs, puis les 50 artisans puis les 10 bourgeois
Si j'arrive à tous les nourrires j'augmente individuellement de 20% leur moral
Si je n'arrive à nourrir que 80 serfs en blé = 20% à tous les serfs que j'aurais nouris
et les 20 serfs restant verront leur moral baissé de 20%
et ce, à chaque ressource et sur chaque type de la population.
(les populations qui se verront augmenter et baisser de 20% sont choisis aléatoirement, je ne vous parle pas du gouffre avec la fonction RAND...).
Je ne sais pas comment arriver à optimiser à sachant que ça ferait au total 100*10+50*10+10*10 = 1600 requêtes UPDATE pour un seul joueur dans cet exemple...
Je ne pense pas qu'il soit possible de faire comme les INSERT INTO en les regroupant tous et exécuter qu'une seule fois la requête...
Je vous mets un bout de code au caou si vous n'arrivez pas à comprendre ce que je veux dire...
<?php
// ARRAY contenant les types de population et le nom de leur bâtiment respectif
foreach($popList as $population => $habitation)
{
// Requête pour sélectionner le nombre de consommation par nourriture selon le type de population
$reqConso = $bdd->prepare("SELECT * FROM consommations_population WHERE type=?");
$reqConso->execute(array($population));
$donConso = $reqConso->fetch();
// ARRAY contenant l'alimentation à consommer qui est débloquée selon un niveau du joueur
foreach($consoPop as $consommation => $niveauRequis)
{
// Si le joueur a un niveau supérieur ou égal au niveau requis de la nourriture
if($donUsers['evolution'] >= $niveauRequis)
{
// La consommation totale que doit consommer vos populations
$consoTotale = $donPop[$population]*$donConso[$consommation];
if($donRess[$consommation] >= $consoTotale)
{
/* Requête UPDATE pour rajouter 20% */
} else {
// Combien n'ont-il pas été nourris ?
$notNourris = floor($donRess[$consommation]*$donPop[$population]/$consoTotale);
/* requête UPDATE pour retirer 20% */
}
}
}
?>
Merci d'avance