IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

PHP & Base de données Discussion :

Optimisation d'un jeu de rôle


Sujet :

PHP & Base de données

  1. #1
    Membre du Club
    Inscrit en
    Novembre 2005
    Messages
    73
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 73
    Points : 58
    Points
    58
    Par défaut Optimisation d'un jeu de rôle
    Bonjour à tous,

    Je développe actuellement un projet PHP type "jeux de rôle" et j’aurais une question. J’espère que j’arriverai à me faire comprendre, car pas évident à expliquer.

    Dans ce projet, chaque membre possède certains attributs.

    L’idée serait de calculer un pourcentage d’affinité entre membres en fonction de leurs attributs.

    Ainsi chaque membre et ses attributs sont stockés dans une base de données mySql et le calcul d’affinité se fait ensuite en PHP.

    Le problème : si je prends l’utilisateur A, et que je veux lui faire ressortir les membres qui sont le plus compatibles avec lui, je dois lire tous la table stockant les membres dans mySql et traiter les résultats en PHP. Ce processus fonctionne très bien quand on a quelques membres, mais cela devient fastidieux et consomme de plus en plus de ressource lorsque le nombre de membres augment.

    Bref, comment faut-il faire pour optimiser tout cela ou traiter cela de manière plus élégante ?

    Un grand merci pour votre aide,
    Metallic-84s

  2. #2
    Membre expérimenté

    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    1 138
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Octobre 2002
    Messages : 1 138
    Points : 1 504
    Points
    1 504
    Par défaut
    C'est un problème relativement compleme mais intéressant.
    Les solutions possibles:

    Celle que tu évoques, c'est à dire recalculer le % d'affinité d'un personnage envers tous les personnages.
    Avantages: temps réel, tu effectues des traitements sur une donnée (le %) calculable à tout instant (et donc pas nécessaire en bdd).
    Inconvénients:Temps de calcul (n*n traitements nécessaires).

    Solution "eco". Tu effectues ce calcul qu'a des moments que tu détermines. Tu calcules l'ensemble des affinités possibles un samedi soir (cron, tache planifié) et tu stockes l'affinité dans ta base de données.
    Avantages: temps calcul diminué, % présent en requete.
    Inconvénients: Tu n'as pas des données mises à jour instantanément.

    Solution "conceptuelle": là ce n'est qu'une hypothèse, mais tu pourrais diviser ton jeu en zones et tu effectuerais le calcul d'affinité entre les utilisateurs d'une meme zone. Quand quelqu'un sort d'une zone pour aller vers une autre, tu mets à jour les pourcentages d'affinité de ce joueur envers ceux de la zone dans laquelle il se dirige.
    Avantages: temps réel gardé.
    Inconvénient: Mise en oeuvre délicate si le jeu n'est pas prévu comme celà à l'origine.

    J'ai pas d'autres idées en tete car je te répondes comme ça en live mais peut etre devrais tu explorer ces pistes car ta solution ne tiendra pas (ou te coutera tres cher en serveur) avec un nombre de joueurs grandissant.

  3. #3
    Membre émérite
    Avatar de Seb33300
    Homme Profil pro
    Développeur Web
    Inscrit en
    Janvier 2007
    Messages
    1 563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Thaïlande

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 563
    Points : 2 390
    Points
    2 390
    Par défaut
    Je ne sais pas comment sont calculé tes affinité entre membres mais peut etre est il possible de calculer un indice unique à chaque personne que tu stocke dans un champ indexé.

    Ensuite tu n'as plus qu'a rechercher les membres qui ont un indice proche du tien.
    Zend Certified PHP Engineer

    « Crois-tu comprendre le monde juste en matant le 20H Ou connaître l'histoire en ayant lu que l'angle des vainqueurs ? » Keny Arkana

  4. #4
    Membre du Club
    Inscrit en
    Novembre 2005
    Messages
    73
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 73
    Points : 58
    Points
    58
    Par défaut
    Bonjour à vous deux et merci pour vos conseils !

    Alors Seb33300, malheureusement ce n’est pas un indice unique donc ta solution n’est pas envisageable.

    Raideman, j’ai finalement opté pour une de tes propositions : j’effectue les calculs en temps réel (car stocker ces indices aurait nécessité beaucoup trop de ressources de la base de donnée : exemple, 1000 membres : 1000 * 1000 entrées…). Cependant, j’ai mis en place différentes zones comme tu le proposais : pays et régions, afin d’effectuer ce calcul que sur une sélection de membres plutôt que sur toute la base de donnée.

    Bonne journée,
    Metallic-84s

Discussions similaires

  1. [DS] jeu de rôle / aventure, demande de conseils
    Par Jasmine80 dans le forum Consoles
    Réponses: 12
    Dernier message: 20/06/2008, 09h24
  2. [MCD] personnages de jeu de rôle
    Par Loric dans le forum Schéma
    Réponses: 6
    Dernier message: 16/04/2008, 16h06
  3. [Outil] Jeu de Rôle Creator
    Par -4ian- dans le forum Contribuez
    Réponses: 19
    Dernier message: 27/12/2007, 12h35
  4. [Jeu de Rôle] Livres dont vous êtes le héros
    Par flo_flo dans le forum Lectures
    Réponses: 55
    Dernier message: 13/11/2007, 14h07

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo