22-06-2010, 06:36 PM
Bon, je résume donc ce que je te conseille d'appliquer (et je finirais par une explication de pourquoi il ne faut pas choisir les autres solutions).
On aurait un système à 2 tables.
Une table buildings, avec les informations relatives aux bâtiments, dont le niveau.
Une table dependencies, avec les colonnes :
Ainsi, quand un joueur cherche à construire un bâtiment, tu as juste à récupérer la liste des bâtiments requis avec une requête de ce type (où %d est l'id du bâtiment que le joueur souhaite construire).
Ainsi, tu as une liste des bâtiments nécessaires et le niveau qu'ils doivent avoir.
Il ne te reste plus qu'à croiser ça avec la liste des bâtiments dont dispose le joueur (que tu dois avoir récupéré en amont, très simplement).
Et voilà, tu as une solution simple, qui tient la charge et qui est optimisée par le serveur (grâce à un index sur la colonne building_id de la table dependencies).
Parce que c'est bien le problème des solutions bancales proposés, en disant les avoir testé avec 2 utilisateurs… C'est pas mal comme recul pour savoir comment ça se comporte lors d'une montée en charge. iffle: D'ailleurs, remarquez comme ces solutions très réalistes sont soutenues par les quelques développeurs expérimentés qui traînent sur ce forum. iffle:
Sephi-Chan
On aurait un système à 2 tables.
Une table buildings, avec les informations relatives aux bâtiments, dont le niveau.
Une table dependencies, avec les colonnes :
- building_id - l'ID du bâtiment dont on définit les prérequis ;
- needed_building_id - l'ID du bâtiment nécessaire ;
- needed_level - le niveau requis pour le bâtiment nécessaire ;
Ainsi, quand un joueur cherche à construire un bâtiment, tu as juste à récupérer la liste des bâtiments requis avec une requête de ce type (où %d est l'id du bâtiment que le joueur souhaite construire).
SELECT needed_building_id,
needed_level
FROM dependencies
WHERE building_id = %d;
Ainsi, tu as une liste des bâtiments nécessaires et le niveau qu'ils doivent avoir.
Il ne te reste plus qu'à croiser ça avec la liste des bâtiments dont dispose le joueur (que tu dois avoir récupéré en amont, très simplement).
Et voilà, tu as une solution simple, qui tient la charge et qui est optimisée par le serveur (grâce à un index sur la colonne building_id de la table dependencies).
Parce que c'est bien le problème des solutions bancales proposés, en disant les avoir testé avec 2 utilisateurs… C'est pas mal comme recul pour savoir comment ça se comporte lors d'une montée en charge. iffle: D'ailleurs, remarquez comme ces solutions très réalistes sont soutenues par les quelques développeurs expérimentés qui traînent sur ce forum. iffle:
Sephi-Chan