Citation :Si a un moment donné, le jeu devient trop lourd à gérer, j'aviserai et je grouperai selon les catégories pour faire un ensemble.Pour moi, t'y es déjà (enfin, quand t'auras des joueurs; je te le souhaites, mais je doute quand même qu'un jeu au démarrage ait des milliers de joueurs actifs... et une centaine de joueurs actifs amènent des millions de ligne de BDD, je pense que tu peux revoir ton modèle/ton gameplay, qui ne sont pas adaptés à tes moyens)
Le problème n°1 de Ter Rowan est le plus pertinent à mon sens, car même si tu réussissais à coder une telle structure, alors ce ne sera pas jouable et pas joué.
Perso, j'ai l'impression que t'es dans les mêmes rails qu'ECLERD, le mot "moral" est juste remplacé par "Manifestations, Emeutes, Guerre Civil" (ouep, 3 niveaux de moral différents, c'était vraiment une idée de génie >.>). Je confirme ce que dis Ter Rowan: la quantité de calcul explose (même si j'avais trouvé cela marrant à faire, niveau résultat final et jeu jouable, bof bof) et la jouabilité s'effondre.
Pour ma part, j'avais implémentée le moral par catégorie d'habitants (~12 tranches d'âge et ~6 corps de métiers = 72 catégories, ce qui fait déjà par mal). Là, c'est gérable niveau code. Niveau joueur, c'est autre chose. Par exemple, des spirales dépressives apparaissent (et pas que chez le créateur!): j'ai une baisse de ressources, donc le moral de la population baisse (car elle mange moins), donc sa productivité baisse (cf règles) donc la quantité de ressources baisse... Et 72 catégories, pour savoir laquelle est dépressive et ce qu'il faut donc faire, c'est cramé.
@Keltaïnen Pour MySQL, si tu charge des centaines de millions de lignes, c'est par un fichier qu'il te faut passer via LOAD DATA INFILE. Ici, je parle d'UPDATE. Il n'y a pas de limite "en dur aux alentours de 8k-10k". Dans l'exemple ci-dessous, la table est une liste de 524k vaisseaux, avec un id "type". Les valeurs indiquées montrent une durée linéaire, avec certes un "flottement", mais à 80k (sur mon poste maison, MySQL 5.7.14, avec un PRIMARY sur id et un INDEX sur type).
UPDATE vaisseaux SET `type` = `type`-1 WHERE id < 50000
-- Tout 524k -> 15s
-- Where 500k -> 15s
-- WHERE 300k -> 10s
-- WHERE 200k -> 7.7s
-- WHERE 100k -> 5.6s
-- WHERE 50k -> 1.5s
-- WHERE 10k -> 0.3s
-- Where 1k -> 0.03s
En revanche, ce que j'accorde sans problème, c'est la lenteur des requêtes préparées de PHP. Passé les 100 voire 1000 élément, c'est juste immonde (faute à une complexité non-linéaire).