La meilleure structure MySQL ...

Résolu/Fermé
gnomesgames - 16 janv. 2008 à 20:55
gnomesgames Messages postés 84 Date d'inscription dimanche 5 août 2007 Statut Membre Dernière intervention 18 octobre 2008 - 18 janv. 2008 à 16:33
Bonjour,
Voilà je suis en train de programmer un jeu en ligne genre Ogame , ça avance bien , mais quelque chose me dérange :
J'utilise la BDD MySQL , j'ai appris sur le tas en regardant les différents tuto.
Le jeu se découpe en 'case' et dans chaque case peut appartenir à un joueur , dont on connais l'id . Ce que je veux enregistrer dans ma BDD , c'est pour chaque couple id/case , le contenu de cette case. Une case peut contenir des troupes ou des travailleurs et pour chaqun des 2 types , il éxiste plusieur catégorie ... (Je sais ca fait pas mal de truc ;) )
Donc pour l'instant ce que j'utilise pour l'instant ce sont ce que j'ai apppelé des 'chaine de troupe' ou 'chaine de travailleurs'.
Dans ma BDD , j'ai donc 2 tableau :

Un avec les corespondance ID/Case/Contenu

L'autre avec : Case/chaine travailleurs/Chaine troupe

En simplifiant parce que ya plus de chaine que ca (ressources etc..)

Pour construires mes chaine je fait un 'implode' avec un tableau Php et pour les récupéré un 'explode'.

Cela marche impec mais hélas .... Il parrait que ce n'est pas du tout la meilleur façon de le faire , je ferais mieu de faire plutot une ligne avec a chaque fois le type (travailleurs / ressources / troupe ..) le numéro de la catégorie , et le contenu ....
Mais imaginé : 100 joueurs avec tous 10 Cases et 20 info a stocker par case ca va devenir Titanesque et vachement embétant a gérer ....

Donc est-ce que je peux garder mes chaines qui sont des VarCHAR (deux de 100, une de 40 et une de 30) ou vaut il mieu que je me 'convertisse' au Int et a de multiple ligne ....
A voir également:

9 réponses

gnomesgames Messages postés 84 Date d'inscription dimanche 5 août 2007 Statut Membre Dernière intervention 18 octobre 2008 17
17 janv. 2008 à 00:40
Heu personne ?
Peut etre demain alors ?
0
gnomesgames Messages postés 84 Date d'inscription dimanche 5 août 2007 Statut Membre Dernière intervention 18 octobre 2008 17
17 janv. 2008 à 22:26
Personne ?
0
Si ton système marche garde le. Le point faible c'est si tu doit faire des recherches sur ton champs chaine et que tu manipule de gros volume d'enregistrement (de l'ordre de la centaine de milliers). Le varchar n'est pas le plus performant dans ce cas.
0
kzanadeus Messages postés 70 Date d'inscription lundi 3 décembre 2007 Statut Membre Dernière intervention 4 décembre 2009 3
18 janv. 2008 à 10:41
Salut,

selon moi après avoir fait un jeu de ce genre là, je peux t'assurer que ton application ne tiendra pas longtemps si ta base de données n'est pas correctement implémentée.

Voici mon conseil.

Tu fais une table Joueur avec ces données à lui.
Tu fais une table Map(ou planète ou n'importe) avec ces données genre nombre de cases.
Tu fais une table Case qui à ces propres données genre nombre de troupes, ressources disponibles, identifiant de la Map.
Tu fais une table LienCaseJoueur qui ne contient que 3 champs
- L'identifiant du tuple (la ligne)
- L'identifiant du joueur
- L'identifiant de la case

Même si ta base de données contient des milliers de tuples c'est pas un problème d'implémentation mais un problème de débit serveur.

Si tu as d'autres questions.

Cordialement

Kzanadeus.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
gnomesgames Messages postés 84 Date d'inscription dimanche 5 août 2007 Statut Membre Dernière intervention 18 octobre 2008 17
18 janv. 2008 à 12:56
Merci de vos réponse ,
Donc apprement le probleme viendrait de la bande passante du serveur MySQL qui ne supportera pas un nombre exessif de joueur si je fait plein de Varchar ?

@Kzanadeus:
En fait pour l'instant , j'ai :
Une table joueur avec ses différentes données : Identifiant , Login , MDP , Variable de session (Nombre aléatoire pour vérifié l'identité du joueur) , Case principale (chateau) , points
Toutes les donnée de cette table sont chargé au démarage et stocké dans un cookies , une nouvelle variable de session est généré et renvoyé.
A chaque page affiché il vérifie que :
La variable de session a l'endroit ou l'id et la case principale du cookie coresponde a la BDD est bien celui enregistré dans le Cookie.
Sinon ->Login

Une table map qui contient : la position de la case sur la map sous la forme '12x55' , l'id a qui ca apartient , le contenu de la case (un int de 2 de long) qui indique le type de batiment.
Cette table permet surtout d'afficher facilement le monde.

Une table contenu case qui contient la position , l'id du joueur , la chaine de troupe , la chaine de travailleur , la chaine de ressource , la chaine de batiments
C'est celle la qui me pose 'probleme' , vu que chaque chaine peut contenir 10 info , et que je peux pas faire 40 enregistrement par case !

Une table evenement joueur qui permet de gerer les attaque , les mouvement de troupe , les construction etc ... , elle contient : le timestamp a laquel on doit faire l'évenement , l'id du joueur d'origine , l'id du joueur d'arrivée ,les différentes chaines (troupe , travailleurs , etc..) , la case d'origine , la case d'arrivé

Bon voila en gros la structure , comme tu voit le gros avantage , c'est que si je modifier quelque chose par moi meme genre le nombre de troupe de type '2' d'une case , c'est relativement simple ...

Je tien ensuite a préciser que la table contenu case ne contien aucun renseignement sur les cases vides ou non concquise (environ 30% du monde quand il sera plein )

Donc voila , si je veux me débarasser de mes chaine comme tu me l'a conseillé , je vais me retrouver avec des centaine d'info pour la meme case (sachant que c'est un mode de minimum 70x70 cases soit 23x23 case pleines...)

Sinon a part ca pour le débit je sait pas du tout ma BDD est hébergée chez free , tout comme le serveur donc aucune iddée .
Ensuite je vait limiter la taille du (des ?) serveur , pas plus de 500 joueurs par serveur (et c'est un trés large maximum , vu que chaque joueur concomme 7x7 cases minimum.)

Voilà donc si tu pouvait me donner ton avis :D !
Merci encore !
0
kzanadeus Messages postés 70 Date d'inscription lundi 3 décembre 2007 Statut Membre Dernière intervention 4 décembre 2009 3
18 janv. 2008 à 13:56
Je le répète encore une fois, le nombre de tuples c'est pas un problème c'est juste le débit de ton serveur.

Sinon ta conception me parait correcte mais je n'aurais jamais imaginé des chaines pour stocker des infos genre des nombres et des types.

Après tout c'est toi qui voit car si tu arrive à traiter ta base de données telle qu'elle tu devrait la garder car il vaut mieu travailler sur quelque chose de bien facilement plutot que de se forcer à travailler sur quelque chose de génial (en tout cas pour un jeu.).

Cordialement.

Kzanadeus.
0
gnomesgames Messages postés 84 Date d'inscription dimanche 5 août 2007 Statut Membre Dernière intervention 18 octobre 2008 17
18 janv. 2008 à 16:27
Lol ok ;)
En fait j'ai pas du tout l'habitude de trvailler avec des BDD , et d'habitude en programation je peux faire des truc genre Mesinfo[3][2][5] , et donc la forcément etre limité a juste des colones et des info dedans ca m'énervé , donc j'ai préféré transformer mes tableau en variable , plutot que de faire 10 enregistrement par tableau ;)

Bon et bien alors je pense que je vé garder mes chaines :D ! Sinon pour free , tu sait si leur bande passante est bonne ou pas ?

Encore merci pour tes réponses :D
0
kzanadeus Messages postés 70 Date d'inscription lundi 3 décembre 2007 Statut Membre Dernière intervention 4 décembre 2009 3
18 janv. 2008 à 16:32
Désolé je ne connais pas ce genre de bande passante mais que pour des proféssionnels et c'est cher.

Cordialement.

Kzanadeus.
0
gnomesgames Messages postés 84 Date d'inscription dimanche 5 août 2007 Statut Membre Dernière intervention 18 octobre 2008 17
18 janv. 2008 à 16:33
Ok pas de probleme , merci beaucoup ;)
0