14-09-2010, 10:11 AM
Bonjour
Après quelques difficultés apparues hier (erf) sur mes devs, je me suis demandé comment les différents frameworks (et peu importe le langage derrière) géraient les chargements de données complémentaires
- bon je crois que ça ne veut rien dire, je vais illustrer pour clarifier ^^ -
Prenons un cas simplifié sur les personnages.
Les personnages ont des compétences.
j'ai de fait deux tables qui concernent les personnages :
la table personnage ( id perso / nom / prénom / ...)
la table perso_comp ( id perso / id comp / valeur )
maintenant je n'ai besoin de connaitre les compétences d'un personnage que pour traiter la résolution d'action et pour afficher la fiche de personnage.
Dans les autres cas, comme afficher une carte avec les différents personnages présents, je n'ai pas besoin de ces informations de compétence
maintenant dans le cadre de la résolution d'action, on peut avoir à "monter en mémoire" plusieurs personnages (tous les participants)
de fait, si j'ai besoin des compétences d'un personnage, je sais d'avance que je vais avoir besoin des compétences de tous les personnages en mémoire (si il y a une action, tous les participants font un test sur leur compétences)
ça c'est la problématique que j'espère claire ^^
maintenant la question associée : comment traiter ceci ?
n'utilisant pas de FW je suis passé par deux états :
1) je charge les données d'un personnage la première fois qu'un script demande les valeurs du personnage.
Conclusion si 10 personnages en mémoire, je fais 10 fois (pour chaque personnage) select * from perso_comp where id perso = $id perso
2) je charge les données de tous les personnages en mémoire la première fois qu'un script demande les valeurs d'un personnage en mémoire
Conclusion si 10 personnages en mémoire, je fais 1 fois select * from perso_comp where id perso in ($i1, $i2, .... $i10)
aujourd'hui j'en suis à l'état 2 et ça marche pas trop mal (bon jusqu'au refactoring d'hier soir qui m'a mis un petit trouble alors que ça marchait depuis 6 mois)
Certains me diront que cette "optimisation" (quoique je n'en ai pas la preuve, ce n'est que théorique 1 requête meilleure que n )n'est pas forcément utile, et c'est possible mais je crains qu'une fois toutes les informations collectées (compétence, caractéristique, stratégie etc...) je me retrouve avec 60 requêtes au lieu de 6
donc voilo, j'aurais bien aimé savoir comment fonctionnait les FW sur ce sujet (ou comment vous, vous l'auriez résolu) parce que ça doit arriver assez souvent
Après quelques difficultés apparues hier (erf) sur mes devs, je me suis demandé comment les différents frameworks (et peu importe le langage derrière) géraient les chargements de données complémentaires
- bon je crois que ça ne veut rien dire, je vais illustrer pour clarifier ^^ -
Prenons un cas simplifié sur les personnages.
Les personnages ont des compétences.
j'ai de fait deux tables qui concernent les personnages :
la table personnage ( id perso / nom / prénom / ...)
la table perso_comp ( id perso / id comp / valeur )
maintenant je n'ai besoin de connaitre les compétences d'un personnage que pour traiter la résolution d'action et pour afficher la fiche de personnage.
Dans les autres cas, comme afficher une carte avec les différents personnages présents, je n'ai pas besoin de ces informations de compétence
maintenant dans le cadre de la résolution d'action, on peut avoir à "monter en mémoire" plusieurs personnages (tous les participants)
de fait, si j'ai besoin des compétences d'un personnage, je sais d'avance que je vais avoir besoin des compétences de tous les personnages en mémoire (si il y a une action, tous les participants font un test sur leur compétences)
ça c'est la problématique que j'espère claire ^^
maintenant la question associée : comment traiter ceci ?
n'utilisant pas de FW je suis passé par deux états :
1) je charge les données d'un personnage la première fois qu'un script demande les valeurs du personnage.
Conclusion si 10 personnages en mémoire, je fais 10 fois (pour chaque personnage) select * from perso_comp where id perso = $id perso
2) je charge les données de tous les personnages en mémoire la première fois qu'un script demande les valeurs d'un personnage en mémoire
Conclusion si 10 personnages en mémoire, je fais 1 fois select * from perso_comp where id perso in ($i1, $i2, .... $i10)
aujourd'hui j'en suis à l'état 2 et ça marche pas trop mal (bon jusqu'au refactoring d'hier soir qui m'a mis un petit trouble alors que ça marchait depuis 6 mois)
Certains me diront que cette "optimisation" (quoique je n'en ai pas la preuve, ce n'est que théorique 1 requête meilleure que n )n'est pas forcément utile, et c'est possible mais je crains qu'une fois toutes les informations collectées (compétence, caractéristique, stratégie etc...) je me retrouve avec 60 requêtes au lieu de 6
donc voilo, j'aurais bien aimé savoir comment fonctionnait les FW sur ce sujet (ou comment vous, vous l'auriez résolu) parce que ça doit arriver assez souvent