JeuWeb - Crée ton jeu par navigateur
[OPTIM] Garder les infos en Session ou BDD - 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 : [OPTIM] Garder les infos en Session ou BDD (/showthread.php?tid=749)



[OPTIM] Garder les infos en Session ou BDD - Seren - 02-02-2007

Salut,

C'est une question assez générale mais que je vais illustrer sur un cas particulier.

Initialisation :
Je charge une carte 5*5 à la connexion du joueur.
--> requête mysql (dimension 25) sur les table map, perso, objet etc...

Déplacement du personnage:
Pour optimiser je vais recharger uniquement la colonne ou ligne de case dans la direction de laquelle se dirige le joueur.
Si je ne recharge qu'une partie de la carte, il faut que j'ai préalablement garder les informations de la carte quelque part. Je pense à stocker ça dans la $_SESSION[].
--> récupération des données de la $_SESSION[]
--> requête mysl (dimension 5)
--> concaténation des information et affichage.

L'avantage c'est que la "mise à jour" de la carte sera moins couteuse en terme de requete SQL (requête plus simple), mais est ce que récupérer des informations depuis la session (avec éventuellement un unserialize/serialize) est plus efficace/rapide qu'un accès à la BDD. (Sachant qu'il sera de toute façon nécessaire d'accéder à la BDD pour remettre a jour la nouvelle ligne/colonne.)

En gros ma question est : " Est ce que ça vaut le coup ?"

PS : je suis conscient que garder les informations de la carte en cache risque de données des erreurs au final si un autre joueur dans la vision de mon joueur se déplace en meme temps que lui, il sera toujours afficher à son ancienne position. Je peux décider de ne conserver que les variables statique du terrain, genre le type de terrain, qui ne risque pas d'évoluer. Ma question est général sur Session vs Accès BDD. Est-ce que ça vaut le coup de charger sa session avec plein d'infos plutot que de réaccéder à la BDD ?


RE: [OPTIM] Garder les infos en Session ou BDD - gtsoul - 02-02-2007

Il faut distinguer 3 niveau d'informations :
_ informations globales et communes à tous les joueurs (ex : date, nb de joueurs, identifiant bdd)
_ informations persistantes propres à un joueur (id et nom)
_ autres informations propres à un joueur

Dans le premier cas, j'intègre les infos globales dans un fichier de constantes, que je réactualise quotidiennement (avec cron). Je pose un require_once('globale.inc.php') et cela consomme le moins de ressources.

Pour les informations persistantes à un joueur, la SESSION est recommandé. Enregistrez l'id en session est obligatoire. Mais pour chaque SESSION crée, le serveur en gérera autant qu'il y a d'utilisateur, donc c'est assez risqué. De plus, il peut y avoir des problèmes de synchro avec les données réelles.

Pour les autres informations du joueur (vie, carac), elles sont soit stockée en bdd, soit calculées.


Pour en revenir à ta question,
je dirais que cela dépend de ta philosophie et de ton achitecture.
Par exemple, chez un hébergeur mutualisé, je considère que le serveur de données est relié au serveur d'applications apr un réseau local de bourrin, donc j'axe tout sur la bdd et rien en session.
Actuellement, j'ai un serveur dédié ou le serveur de données est sur le même poste que le serveur d'applications. Les transactions s'effectuent du disque dur à la mémoire, autrement dit très rapidement !!

Imagine que tes données soit un paquet (genre 1kg)
Il faut voir les variables de session comme une allocation de mémoire, donc comme si tu tenais tes paquets dans tes mains (chaque variable t'occupe et ralentit tes autres actions,et ta capacité est limitée, mais tu es réactif)
et ta bdd comme une brouette, grande capacité, tu peux te libérer les mains MAIS il ne faut pas être trop loin de la brouette.
De même il est préférable de faire quelques grands voyages vers la brouette et de te remplir les bras au maximum, que pleins de petits.


Si tu veux faire du rechargement partiel, n'utilise pas les variables de session, mais plutot ajax. Tu construis ta page et tu libéres tes variables puis tu modifies uniquement ce qui change.
Au lieu de tout construire, de garder les outils en mains, pour au final tout reconstruire de zéro.