Partage
  • Partager sur Facebook
  • Partager sur Twitter

Quel base de donnée pour une grosse apli

Oracle, postGre ?...

Sujet résolu
    20 mai 2009 à 13:14:00

    Bonjour à tous,

    Avant de me lancer dans mon application j'aimerais posé toutes les bases. C'est pour cela que mon dernier poste portait sur la Library graphique à choisir (pour les curieux je prends Slick).

    Bref,
    j'aimerais savoir comment les grands MMORPG stockent les informations des joueurs :
    Base de données entièrement,
    Fichiers entièrement,
    ou les deux ou autres.

    Après avoir répondu à cette question (si c'est base de données) pensez-vous qu'utiliser Oracle serait une bonne solution pour stocker toutes les données des joueurs et faire énormément de requêtes.
    Pour résumer je veux pouvoir stocker (pas énormément) des informations concernant les joueurs et pouvoir les récupérés rapidement sans pour autant plombé le serveur.

    Merci.


    • Partager sur Facebook
    • Partager sur Twitter
      20 mai 2009 à 13:16:56

      Bonjour,

      Une base de donnée serait meilleur au niveau de l'architecture de l'application.
      Oracle est prévu pour gérer un très grand nombre de données, il n'y a aucun soucis à se faire pour ça.
      • Partager sur Facebook
      • Partager sur Twitter
        20 mai 2009 à 13:29:39

        Merci pour la réponse si rapide !

        J'ai entendu dire que oracle consommait trop de ressources système et qu'il était impossible de faire tourner le serveur sur le même serveur ( j'aime pas ma phrase :s ...) que la base.

        Qu'est-ce que tu en penses ?


        Edit : au passage tu n'aurais pas un tutoriel pour utilisé Oracle sous JAVA, je n'ai pas beaucoup cherché sur le net mais si tu pouvais me faire gagné du temps :)

        Ah non c'est bon, pour ceux qui se poserait aussi la question :
        http://www.javafr.com/codes/CONNEXION- [...] UR_48391.aspx
        • Partager sur Facebook
        • Partager sur Twitter
          20 mai 2009 à 13:40:10

          Hm, Oracle est en effet fait pour les très grosses bases de données. Il possède énormément de features et gère beaucoup de chose dont tu ne te serviras pas dans ton projet. Un SGBD plus modeste pourrait s'avérer un bon choix. Par ailleurs, Oracle possède une version gratuite ?
          • Partager sur Facebook
          • Partager sur Twitter
            20 mai 2009 à 13:51:44

            Oui normalement il y a une version gratuite je ne sais plus laquelle. Que me conseillerais-tu, par exemple PostgreSQL ?

            Pour donner un ordre d'idée de ce que j'aimerais stocker :
            - dès qu'il y a déplacement du joueur on stock l'endroit où il a cliquer pour le charger au même endroit lorsqu'il se connecte.
            - dès qu'il gagne un objet (ou autre) ce sera dans la base aussi
            - dès qu'il combat ces caractéristiques sont aussi stockées dans la base

            Enfin, tous les fondamentaux du jeu quoi.

            Pour répéter ma question plus clairement maintenant :
            Je pourrais utiliser PostGre pour stocker toutes les données du mmo(rgp)? .
            Ce qui fera peut-être 2-3 requêtes par joueur par seconde (sachant que je ne penses pas faire une révolution du jeu ).
            • Partager sur Facebook
            • Partager sur Twitter
            Anonyme
              20 mai 2009 à 14:06:28

              Citation : Annuman


              Ce qui fera peut-être 2-3 requêtes par joueur par seconde (sachant que je ne penses pas faire une révolution du jeu ).



              C'est pas viable question performance, fait des traitements sur les données en ram et persiste ces données lorsque le joueur quitte ou bien à intervalle régulier.
              • Partager sur Facebook
              • Partager sur Twitter
                20 mai 2009 à 14:08:44

                Euh selon ce que tu dis, tu stockeras assez peu de données. Un PostgreSQL fera très bien l'affaire, et même si ta base devient importante il fera très bien l'affaire. Quand on parle de grosses bases de données, c'est de dizaines de millions d'enregistrements dont on parle.
                • Partager sur Facebook
                • Partager sur Twitter
                  20 mai 2009 à 14:13:31

                  Citation : janulrich00001

                  Euh selon ce que tu dis, tu stockeras assez peu de données. Un PostgreSQL fera très bien l'affaire, et même si ta base devient importante il fera très bien l'affaire. Quand on parle de grosses bases de données, c'est de dizaines de millions d'enregistrements dont on parle.


                  o_O Ah oui, dis comme ça ....


                  Citation : Pas de titre

                  C'est pas viable question performance, fait des traitements sur les données en ram et persiste ces données lorsque le joueur quitte ou bien à intervalle régulier.



                  Oui c'est ce que j'ai pensé au départ, mais ... Si le Pc du joueur lache, je pourrais quand même enregistrer ses infos en base de données avant de couper le " socket " (oui je crois que c'est ça) ?
                  Si c'est le cas, c'est vrai que c'est autre chose ...

                  • Partager sur Facebook
                  • Partager sur Twitter
                    20 mai 2009 à 14:18:15

                    Je te suis un peu à la trace hein mais bon c'est parce que je me suis posé les même questions que toi très récemment :p

                    Je pensais utiliser une DB embarquée perso, je connais déjà un peu Derby et c'est plus simple à mettre en place, transporter qu'une DB avec serveur.

                    Après niveau perfs j'ai pas trop réfléchi à ça...
                    • Partager sur Facebook
                    • Partager sur Twitter
                      20 mai 2009 à 15:07:11

                      MySql avec le moteur MyISAM reste la bdd une des (la ?) bdd les plus rapide que tu puisses trouver.
                      Cela dit tu n'auras pas d'intégrité.
                      Soit tu estimes que tu peux t'en passer (ce qui serait étonnant pour un mmorpg) soit tu changes de moteur et prends innoDB.
                      Si tu trouves que innoDB est incomplet (faut déjà en vouloir) passe a postgresql ou >...
                      Plus c'est complet et complexe, plus c'est lent, il n'y a pas de mystère...
                      • Partager sur Facebook
                      • Partager sur Twitter
                        20 mai 2009 à 17:05:54

                        Merci pour ces réactions,
                        j'ai opté pour postgreSQL (déjà le cours sur sdz en plus).

                        J'ai une autre question :
                        Je peux tout stocker en mémoire (fin par les sockets plutôt) et quand le joueur se déconnecte j'enregistre sa "position" dans le jeu ainsi que quelques autres infos secondaires et ce même si son ordinateur (le client) coupe (coupure d'électricité par exemple) ?

                        Merci encore !
                        • Partager sur Facebook
                        • Partager sur Twitter
                          20 mai 2009 à 17:08:36

                          Citation : Annuman

                          Citation : janulrich00001

                          Euh selon ce que tu dis, tu stockeras assez peu de données. Un PostgreSQL fera très bien l'affaire, et même si ta base devient importante il fera très bien l'affaire. Quand on parle de grosses bases de données, c'est de dizaines de millions d'enregistrements dont on parle.


                          o_O Ah oui, dis comme ça ....

                          >> Ou alors de milliers de tables :) , ou les deux


                          Citation : Pas de titre

                          C'est pas viable question performance, fait des traitements sur les données en ram et persiste ces données lorsque le joueur quitte ou bien à intervalle régulier.



                          Oui c'est ce que j'ai pensé au départ, mais ... Si le Pc du joueur lache, je pourrais quand même enregistrer ses infos en base de données avant de couper le " socket " (oui je crois que c'est ça) ?
                          Si c'est le cas, c'est vrai que c'est autre chose ...


                          Euh, tu confonds deux choses. Il y a la rame sur l'ordinateur du joueur, et il y a celle de ton serveur. Si le joueur à son PC qui plante, tu stockes ses données de ta ram dans ta BDD. Une requète SQL est très couteuse malgré les apparences. Il faut voir que les données des tables sont stockées dans des fichiers. Fichiers qu'il faut lire, or les lecture/ecriture sur des ES, c'est couteux, très couteux par rapport à un stockage en ram, il faut donc les minimiser au maximum.
                          • Partager sur Facebook
                          • Partager sur Twitter
                            20 mai 2009 à 17:29:13

                            AHhhhhhhhhhhhhhhhhhhh !!! D'accord ! Donc si je fais

                            // private int variable = 1;

                            Au démarrage du jeu (sur un pc) la "variable" sera stockée dans la RAM de mon serveur ?

                            (dans ce cas les données ne sont perdus que lors d'un crache ...)

                            Ca semble bizarre à croire !

                            • Partager sur Facebook
                            • Partager sur Twitter
                              20 mai 2009 à 17:35:54

                              Si ton serveur fait private int variable = 1, cela sera stocké dans ta ram du serveur. Si un client démarre et fait private int salut = 2, cela stockera cette variable dans la ram du client.

                              Le fait de poser cette question m'amène à te poser deux questions? As-tu déjà fais de la programmation dans le style Java, C, C++, C#, Python ou autres? Connais-tu les bases de données? Car se lancer dans un projet pareil en voulant suivre un tuto est utopique.

                              • Partager sur Facebook
                              • Partager sur Twitter
                                20 mai 2009 à 17:44:06

                                Bien j'ai déjà fait une ébauche d'mmorpg (je dis une ébauche car la version complète voit le jour dans 1 semaine) donc je sais utilisé la base de données Mysql mais sans plus. J'ai déjà programmé en C (il y a belles lurettes ... 5 ans peut-être) mais je n'ai jamais fait d'appli client/serveur.

                                Programmation de style JAVA : c'est ce que je fais en ce moment et ce n'est pas du tout comme le Php qui justement ne pose pas de problèmes théoriques (donc je n'ai pas besoin de connaître tout ce qui est de la transmission de données etc, je fais seulement des SELECT, UPDATE ...) contrairement à JAVA.

                                Citation : janulrich

                                Si ton serveur fait private int variable = 1, cela sera stocké dans ta ram du serveur. Si un client démarre et fait private int salut = 2, cela stockera cette variable dans la ram du client.



                                C'est bien ce que je pensais ^^ mais j'ai cru comprendre que Dalshim me disais autre chose.

                                Je raccourcis encore ma question :
                                - Puis-je stocker des informations en bdd sur le joueur 'client' s'il a une coupure de courant ?

                                (au passage merci pour vos réponses rapides)
                                • Partager sur Facebook
                                • Partager sur Twitter
                                  20 mai 2009 à 17:54:51

                                  Il te manque beaucoup de notion de réseau pour entreprendre ce que tu fais. Mais il faut un but, apprendre sans but ne sert que rarement à quelque chose (dit toi juste que ton jeu mettera sûrement beaucoup plus de temps que ce que tu penses à voir le jour).

                                  Dans une appli client serveur, il y a en fait 2 appli. Une pour le serveur (lancer sur le serveur), et une pour les clients (lancer sur chaque poste client, donc autant de fois qu'il y a de client). Les clients communiquent avec le serveur via les fameux socket. Si tu écris quelque chose dans l'appli du client, cela ne se produira que chez le client, de même, si tu écris du code dans l'appli serveur, ce ne sera executé que sur le serveur. En revanche, pour que le serveur puisse tout synchroniser, le client lui envoie des données (comme la fameuse position du joueur). Le serveur en recevant ces données, pourra les stocker dans des variables en ram (pour éviter de les mettres directement dans la BDD). Lorsque le joueur se déconnecte (normalement ou inopinément), il suffira au serveur de prendre les dernière information qu'il a obtenu du client pour les mettre dans la BDD et les charger à sa prochaine connexion. Ce traitement, tu l'associes à une fonction qui sera appeler quand une connexion avec un client se ferme.
                                  • Partager sur Facebook
                                  • Partager sur Twitter
                                    20 mai 2009 à 18:09:14

                                    Citation : Pas de titre

                                    Lorsque le joueur se déconnecte (normalement ou inopinément), il suffira au serveur de prendre les dernière information qu'il a obtenu du client pour les mettre dans la BDD et les charger à sa prochaine connexion. Ce traitement, tu l'associes à une fonction qui sera appeler quand une connexion avec un client se ferme.




                                    C'est LA phrase que je voulais entendre. J'y avais pensé mais du fait de mes faibles connaissances en réseau je ne pouvais en être sûr.

                                    Pour le reste je savais déjà à peu près en étudiant un code source inscription-connexion vers un serveur et tchat à plusieurs utilisateurs.

                                    Bon et bien merci à vous tous ;) J'ai hésité mais j'ai bien fait de poster ici !

                                    Résumons : J'utilise une base de données que seul le serveur à accès, donc je n'utilise que les infos envoyés par sockets :
                                    client => sockets => save dans la RAM (ce qui est le plus rapide) => serveur => SQL => BDD

                                    Corriger moi si je me trompe, et merci encore.
                                    • Partager sur Facebook
                                    • Partager sur Twitter
                                      20 mai 2009 à 18:49:57

                                      C'est vulgarisé, mais c'est a peu près l'idée.
                                      • Partager sur Facebook
                                      • Partager sur Twitter
                                        20 mai 2009 à 18:55:32

                                        C'est enfin clair dans ma tête, je vous remercie tous. Le sujet peut-être fermé ou abandonné (ou pas) ;)

                                        Au fait j'ai trouvé un autre jeu open source de cartes à 4 joueurs avec une appli serveur/client pour voir de plus près, si vous voulez y jeter un oeil demandez-moi par MP.
                                        • Partager sur Facebook
                                        • Partager sur Twitter
                                          20 mai 2009 à 18:59:21

                                          Citation : Annuman

                                          Le sujet peut-être fermé ou abandonné (ou pas) ;)



                                          Tu peux surtout le mettre en résolu. Je te souhaite bonne chance pour la suite de ton apprentissage.
                                          • Partager sur Facebook
                                          • Partager sur Twitter
                                            20 mai 2009 à 19:02:58

                                            C'est fait. Merci pour ton soutien, ça fait toujours plaisir ;)
                                            • Partager sur Facebook
                                            • Partager sur Twitter
                                            Anonyme
                                              21 mai 2009 à 2:09:14

                                              A propos des SGBD, quelqu'un saurait ou trouver un bon tutorial pour Derby? Je n'arrive pas à en trouver.

                                              Merci
                                              • Partager sur Facebook
                                              • Partager sur Twitter
                                                21 mai 2009 à 11:57:49

                                                Site officiel de Derby... magie ?> http://db.apache.org/derby/papers/DerbyTut/index.html#Tutorial+Topics
                                                • Partager sur Facebook
                                                • Partager sur Twitter
                                                  22 mai 2009 à 3:53:26

                                                  Je pense qu'un cours d'amabilité ne ferait pas de mal à certaines personnes... :-°
                                                  • Partager sur Facebook
                                                  • Partager sur Twitter

                                                  Quel base de donnée pour une grosse apli

                                                  × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                                                  × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                                                  • Editeur
                                                  • Markdown