JeuWeb - Crée ton jeu par navigateur
Efficacité table sql - 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 : Efficacité table sql (/showthread.php?tid=3450)

Pages : 1 2 3


RE: Efficacité table sql - keke - 18-12-2008




RE: Efficacité table sql - biboum - 18-12-2008

Désolé du temps de réponse, journée pas mal chargé...


question: est-ce que le nombre de pays est limité ou pas ? (soit parce qu'il est fixe; soit parce que tu décide que y aura jamais plus de X pays actifs à un moment donné)
==> Oui c'est fixe, du moins pour le moment. Il y aura une centaine de pays ACTIF, mais les autres seront des PNJ, donc ils resteront présent...mais un fixe de 200pays environs.
Mais cela pourrait changer dans une version X ^^

Oui, y a du trop c'est vrai. Parce que justement réaliste à l'extreme, c'est d'ailleurs plus une simulation que je souhaite faire qu'un jeu...enfin c'est entre les deux. Et je le fais pour moi par pour les autres...c'est vraiment égoiste mais je fais le jeu que j'ai toujours voulu pour enfin ne plus être frustré tant par les jeux des studio pros, qu'amateur, etc...et d'un autre coté ca colle parfaitement avec mes études et me permet d'interpreter ce que je vois informatiquement...mais bref, oui c'est un poil trop complexe, mais au final c'est aussi le concept que je cherche, retranscrire la complexité du reel...

D'où mes 10ministères avec déjà pas mal de données à l'intérieur...
Mais kéké a raison, au final mes 10ministères n'ont pas besoin d'avoir chacun leur table...j'ai fait ca vu que j'ai developper un ministere apres l'autre, mais mes 10ministere peuvent etre sur une seule table ayant exactement la même conception...

Après c'est un peu comme tu le dis toi même, c'est mon premier jeu, c'est mon premier projet, en septembre dernier, je postais mon premier post ici pour demander de l'aide sur un truc que finalement j'ai reussit à faire que la semaine derniere, vu que j'y comprenais rien du tout à l'époque...avant septembre, j'ai jamais fait de conception, ni de programation par objet, encore moins de programmation en fait ...ni html, ni php, ni sql, ni rien du tout...utilisateur basique d'internet...
Du coup c'est un peu la découverte, et là la découverte d'un soucis sur lequel je butte. Smile
Parce que pour 2joueurs, y a pas de soucis...pour 90soucis ca risque déjà de ramer un peu plus sans optimisation. Les types de champs j'ai essayer de faire au mieux pour les optimiser, mais pas forcement leur conception et leur relation...faut dire que c'était coton au début pour comprendre aussi...^^

Bon bah je crois que vous répondez à la question^^ ce n'est pas viable en l'état...Ca sera a mettre à jour lors de la V2...revoir la BDD, ...
J'ai 156tables, avec le systeme guerre- ca devrait dans ma facon de faire actuel monter à environ 200tables. Mais ca pourra, devra se limiter à 100tables le tout, je crois que ca sera un maximum acceptable...

D'ailleurs kéké, je suis en train de voir ton projet, intéréssant, très intéréssant (pas adaptable chez moi ne t'inquiete pas Smile)


RE: Efficacité table sql - z3d - 19-12-2008

Salut,

Il est clair que tu es parti sur une mauvaise voie, tu as créé tes tables à la volée.

MONUMENTAL erreur !

il faut toujours conceptualiser sa base de données !
(Aux admins qui passent ^^ Il manque une section Conception avant Algorithme & Solutions :p)

Pour se faire, plusieurs outils s'offrent à toi; certains payant, d'autres open source dont MySQL Workbench, que je te conseille, également DBDesigner4, que d'autres te conseilleront mais que j'espère tu éviteras pour la raison qui suit, son développeur fût débauché pour créer MySQL Workbench; de ce fait il ne maintient plus sa version Wink

Avec un tel logiciel aggrémenté de méthodes d'analyse et de conception telle la méthode Merise t'aurais permis de nous donner plus d'outils à la compréhension de ton problème.

Pour l'optimisation de ta base de données, je vais te donner un premier conseil; c'est une règle d'or dans la conception d'une base de données :

Premièrement. Jamais de redondance de données tu feras !

Exemple:


CREATE TABLE test.CLIENT(
ID INT(10) NOT NULL,
NOM VARCHAR(64) NOT NULL,
PRENOM VARCHAR(64) NOT NULL,
ADRESSE VARCHAR(255) NOT NULL,
TELEPHONE VARCHAR(32) NULL,
PRIMARY KEY(ID)
)
ENGINE = InnoDB
CHARACTER SET utf8
COLLATE utf8_unicode_ci;


CREATE TABLE test.COMMANDE(
ID INT(10) NOT NULL,
NOM VARCHAR(64) NOT NULL,
PRENOM VARCHAR(64) NOT NULL,
PRODUIT VARCHAR(255) NOT NULL,
PRIMARY KEY(ID)
)
ENGINE = InnoDB
CHARACTER SET utf8
COLLATE utf8_unicode_ci;
On voit ici de la redondance de données, voici comment l'on procède :


CREATE TABLE test.CLIENT(
ID INT(10) NOT NULL,
NOM VARCHAR(64) NOT NULL,
PRENOM VARCHAR(64) NOT NULL,
ADRESSE VARCHAR(255) NOT NULL,
TELEPHONE VARCHAR(32) NULL,
PRIMARY KEY(ID)
)
ENGINE = InnoDB
CHARACTER SET utf8
COLLATE utf8_unicode_ci;


CREATE TABLE test.COMMANDE(
ID INT(10) NOT NULL,
ID_CLIENT INT(10) NOT NULL,
ADRESSE VARCHAR(255 ) NOT NULL,
PRODUIT VARCHAR(255 ) NOT NULL,
PRIMARY KEY(ID)
)
ENGINE = InnoDB
CHARACTER SET utf8
COLLATE utf8_unicode_ci;
Petite subtilité, on voit ici le champ ADRESSE dans la table COMMANDE, 2 cas s'offrent ai-je fait de la redondance de données ?

Voici, mes deux centimes pour t'éclairer face à ton problème.

N.B : Bien plus que l'optimisation, si tu revois la conception de tes tables, (attention, je me lâche sans connaissance de ton projet ^^) je suis sûr que tu divises le nombre de tables total estimé (200) par 3 minimum


RE: Efficacité table sql - biboum - 19-12-2008

Ca en général la redondance je ne fais pas.
A moins que le champs "id_pays" qui revient pratiquement toujours ou "id_territoire" pour faire le lien entre deux tables ne soit considéré comme de la redondance ?

Conceptualiser...Confused
Pas facile quand meme, y a des logiciels comme tu me les présentes, mais bien plus qu'un logiciel c'est le principe qui s'en dégage derriere que j'ai l'impréssion ne pas avoir bien intégré encore...
enfin à mes débuts...j'essayais de faire des organigrames dans mysql...y a un post ici ou je demandais comment faire des sous-sous-menu...^^
Je pense que conceptualiser je pourrais faire maintenant (et encore) mais quand le projet a débuter, c'était impossible, déjà parce que j'avais aucune connaissance de l'HTML, du SQL, du PHP, et qu'au final mon jeu a servit de "morpion" comme entrainement...
Bon bah les vacances qui approchent...ca va etre sympa Smile


RE: Efficacité table sql - wild-D - 19-12-2008




RE: Efficacité table sql - keke - 19-12-2008

Biboum > indépendamment de ce topic, je pense que tu as franchis le premier niveau de développement. D'autres choses t'arriveront mais au moins, tu te poses de bonnes questions.
Peut-être qu'avant de tout recommencer, et parce que tu sembles assez motivé et curieux, tu devrais t'allier à un projet existant ? Afin de voir les autres problèmes que tu ne pouvais pas comprendre il y a quelques temps, et surtout comprendre des méthodes de développement.
Y'a plein de projets sérieux sur ce forum. Certains ne font pas de bruit, pas de pub, pas de demande d'aide ... mais il se peut que ce soit les projets les plus intéressants ! Bon, par contre, y'a tout un tas de projet sur lequel je miserais pas 1 centimes ... je cite personne :-< mais certaines personnes ont du recevoir des petits mots doux de ma part à ce sujet.
Bref, prend ton temps, prend du recul ... considère ton premier projet comme un bon début, un bon brouillon, un bon exercice ... mais je doute qu'il faille le prendre comme un projet à finaliser. Les erreurs de conceptions de données font parties des erreurs qui ne pardonne pas.
J'en fais les frais sur des broutilles que j'avais finalement laissé passer parce que, avec l'insistance de 2 admin du moment, on a fait au plus court ... et maintenant, pour corriger ce tout petit point ... j'ai peut-être une 30 aine d'heure de rattrapage à faire ... Hors dans mon cas 30 heures ça représente presque 2 mois de travail en mettant de côté le travail récurant.

Voilou ^^

Kéké
Ps : OXMAN > Tu as tout à fait raison de soulever la nuance.
Citation :tu ne dois pas dire "peuvent être sur une seule table", mais plutôt "doivent être sur une seule table"
Si c'est pas intuitif (ce qui heureusement est mon cas ... ouf !), il faut que tu réfléchisses au cas par cas à toutes tes tables et à tous les enchainements possibles entre elles. La technique de l'objet peut-être intéressante pour ce type de conceptualisation : un objet -> une table.
PS :
Citation :D'ailleurs kéké, je suis en train de voir ton projet, intéréssant, très intéréssant (pas adaptable chez moi ne t'inquiete pas 2)
Merci beaucoup pour ce mot ^^. Je ne m'inquiète pas le moins du monde. Les idées ne sont pas brevetables en France. Tu as le droit de piller toutes les idées, j'en serais même ravis ^^. Si en plus on parvient à discutailler dessus ça pourrait être un super moyen pour réactualiser certains points de mon jeu. Pour ce type de discussion, n'hésites pas à parler sur mon WIP ^^.


RE: Efficacité table sql - biboum - 19-12-2008

Hummm m'allier à d'autres projets...a mes tout débuts j'avais commencé par aider un peu un concepteur d'un autre jeu déjà bien entamé. Mais ca ne m'avais pas du tout plus, le fait de "marcher" sur un autre, je sais pas...ca avait pas coller.

Je pense par contre que le "mais je doute qu'il faille le prendre comme un projet à finaliser" tu aurais put t'en passer...je ne le prend pas mal, mais je sais ce que vaux mon projet et surtout ce qu'il représente. Ce n'est pas coder qui me plait, ce n'est pas programmer qui me plait, c'est bel et bien le pourquoi du projet...faire des morpions bah...ca m'interesse pas...
Donc non, quitte à ce que je doivent refaire toute une partie, et j'ai déjà refait, et refait, et rerefait, c'est pas grave, je referrais, mais si y a bien une chose qui me fait tenir, c'est bien parce qu'il y a ce projet et pas un autre...et même s'il vaudrait pas un centime, (j'en sais rien), il vaudra tout l'or du monde pour moi, car c'est le jeu que je cherche et qu'aucune boite pro ne m'offrira jamais...

Je viens de revoir un peu mes tables dans la journée, je suis passé de 156tables à 121.
Du coup le site est encore plus bugger qu'avant^^ Mais c'est plus clair, ne serait-ce que pour rechercher dans la BDD pour moi...
Mais du coup la programmation objet, je pensais savoir la faire....pfff j'ai bien rigoler quand j'ai refait un petit tour sur lesiteduzero voir de nouveau...^^
Je vais devoir refaire toute ma partie économie qui est sur 40tables, ce qui n'est pas du tout gérable...ni pour l'utilisateur, ni pour moi. Je sais pas si c'est lié mais c'est toujours les pages les plus longues à charger.(y a pas d'image), si ca peut améliorer aussi le temps de réponse, c'est toujours bon à prendre, parce que là je suis tout seul, mais si y a 100joueurs en même temps...bonjour les dégats...

merci de votre aide.


RE: Efficacité table sql - lemouix - 19-12-2008

bonsoir...

121 tables... vous êtes DBA dans une boîte ? et encore 121 tables pour une base... je me poserai des questions Smile

Un beau schéma ça aide => je me répète encore mais =>>>> MEA: Modèle Entité Association Smile

Mettre surtout avant par écrit toutes les contraintes !!!

Aller un papier, un stylo et gogogo !


RE: Efficacité table sql - Zamentur - 20-12-2008

Juste un petit lien
http://dev.mysql.com/doc/refman/5.0/fr/creating-many-tables.html

Donc en gros MYSQL stockant ses tables dans des fichiers risque de prendre plus de temps à trouver la table en question dans le dossier avant de commencer à chercher.

Et il y a sans doutes des méthodes pour limiter le nombre de table, on peut faire du réalisme sans pour autant avoir énormément de table.

Pose toi aussi la question de ce qui est fixe et de qui ne l'est pas! Es tu sur que certaine donnée n'ont pas à être dans des fichiers de configuration?

Pour savoir si une donnée doit être dans un fichier plutôt qu'une bdd:
- on regarde le nombre de donnée si il y en a ou y aura peut être plus de 100 la réponse est: table
- on regarde si les modifications fréquentes sont nécessaire (modif par tous les users plusieurs fois par jour) si c'est ou sera peut être fréquent la réponse est: table
- on regarde si l'on va avoir besoin d'obtenir une donnée autrement que par la seul clef si c'est ou sera peut etre le cas la réponse est: table

Dans les autres cas il peut être envisager de passer en fichier et d'éviter la lourdeur de l'appel à Mysql. J'ai mis en gras pour bien faire comprendre qu'il faut avant penser à l'évolutivité du script...

Ensuite une fois que çà c'est fait, il y a effectivement de nombreuse optimisation à faire. Simplement on va avoir du mal à te conseiller sans avoir un aperçus plus complet.
Tes ministères sont cependant un parfait exemple d'optimisation à faire. La mise en place d'un index sur l'identifiant du ministère permettra surement d'aller plus vite qu'avec tes 10 tables. Sans compter que ce sera plus propre au niveau de tes requêtes SQL.

Bref tu arrives effectivement comme l'a dit Keke à un moment ou tu te rend compte qu'il va falloir refaire certaine chose, car tu n'étais même pas conscient des problèmes que çà pouvais éventuellement causer.
Ton histoire de 40 tables c'est notamment un trucs à revoir une page ne doit pas faire trop de requêtes à la bdd si elle veut arriver vite.

En tout cas je te conseille de faire attention, il y a plein d'erreur sournoise, qui peuvent t'handicaper pendant longtemps. On est nombreux à se rendre compte de problème en phase de production et à ne plus savoir ou donner de la tête entre le désir d'évolution, l'administration de la communauté et la stabilité de l'application qui est de plus en plus difficile au fur et à mesure des ajouts.

J'espère juste pour toi que tu seras en éviter plus que ce que d'autre on pu se prendre en pleine face...


RE: Efficacité table sql - biboum - 20-12-2008

121 tables... vous êtes DBA dans une boîte ?
==> Juste un Newbies^^

J'avais tenter au début de faire un schema, l'on me l'avait conseiller...mais quand j'ai vu l'impossible vision qu'il fallait faire, j'avais abbandonner.
J'ai plus ou moins divisé le jeu en trois entités indépendante : le jeu économique, le jeu guerrier, le jeu communicatif. Là dedans chaque entité se retrouve divisé en entité indépendante. Où les interconnections sont rare mais sont faites par jointure le plus souvent. Les pages n'ont pas plus de 4requetes SQL (excepté celle pour le menu/ ce qui monte à 8par page maximum).

Pour savoir si une donnée doit être dans un fichier plutôt qu'une bdd:
==> Alors tout chez moi doit passer par une table...:/

Je vous montrerais bien où ca en ait en ce moment, mais le graphisme est en train de se renouveller, du coup, ca bug pour le 3/4 de l'existant...

Il me faut terminée toute la partie "Economie", la partie communication étant terminée, et alors j'aurais une vue d'ensemble et au final réellement une possibilité de refondre les pages, la BDD, en sachant exactement ce que je veux. Car là, il me reste encore trop de pages à implémenter pour pouvoir modifier l'existant. Juste pour le moment repenser ce qui va être fait avec ce qui a été fait...

Mais je sais bien que ce projet ne se fera pas en deux claquements de doigts...j'en suis à 4mois, je m'étais fixer comme objectif "5ans de conception, 5ans d'améliorations..."^^