08-13-2008, 04:27 PM
Bonjour,
je "reprend" le dev de mon jeu depuis le début (Cambriolage de Mon PC en Janvier
), j'ai posé l'architecture il y a quelques jours.
En gros posé le concept MVC, la lisaion Vue Controleur fonctionne bien, en fonction des thèmes et de langue etc...
Maintenant, il me reste la lisaison des données, et je suis confronté à un énorme problème...
Je peux utiliser pour récupérer des données :
- Une api propre à la BDD (mysqli, ...)
- Une couche d'abstraction (Pdo, ...)
- Un ORM (ezPDO, Doctrine, Popel)
- Quelque chose fait soit même, qui permet de faire de l'abstraction tout en permettant de ce passer de 50% du code sql....
Pour l'instant je penche sur la dernière solution qui consiste à faire un générateur de code Bo/Dao à partir de la représntation XML d'une BDD (Générer via logiciel tiers Dbdesigner 4 par exemple).Les Bo ne pose pas de problème, les DAO ne pourront que faire des requetes CRUD sur les Bo(Objets). Tout en proposant une solutions simples pour les requetes plus compliqué...
Mais avant de continuer tête baisser dans mon double projet. Je voulais avoir votre avis sur l'ORM... En effet je pense qu'il est beaucoup trop lourd niveau performance pour un jeu PHP qui fait énormément d'appel à la bdd. Mais je consoit qu'il facilite grandement le coté développement.
Tout simplement imaginons que j'ai une table book avec 10champs, et que je veux n'afficher que le nom du livre. En sql simple suffit de faire "SELECT book_name FROM book..."
Mais avec n'importe quel ORM, il récupère l'objet entier... Et donc les 10 champs.Niveau optimisation on a connu mieux...
Ayant en vu par exemple Stargate-Univers où on avait voulut séparer le serveur BDD du serveur PHP. La bande passante entre le serveur BDD et le serveur PHP serait cramé en un rien de temps...
Donc dans ce sens je pense qu'un ORM est inutilisable si on fait un jeu compliqué et lourd et qu'on vise de nombreux joueurs, avec de petit moyen en machine. Le plus optimisé serai de tout faire à la mano selon moi. Mais bon vous en pensez quoi ?
Ca ressemble un peu au débat procédurale/objet, sauf que dans l'exemple de Stargate Univers, PHP utilise moins de 15% du serveur, alors que mysql est extrèmement gourmand avec plus 70% du serveur.
Dons si le combat où le procédurale gagne en optimisaton face à l'objet, la différence de performance est largement contestable, or avec une base de donnée (Mysql par exemple, quand meme la plus rapide), on ne peut pas oublier l'optimisation...
PS : J'ai juste survoler la liste des ORM, mais j'ai lu toute la doc d'EZPDO, et il n'y a pas de possibilité pour par exemple prendre que le champs nom d'une table.
Propel est super efficace pour la gnération de BDD et d'objet, mais il me semble pas avoir vu aussi le même point dans la doc de symfony...
je "reprend" le dev de mon jeu depuis le début (Cambriolage de Mon PC en Janvier
En gros posé le concept MVC, la lisaion Vue Controleur fonctionne bien, en fonction des thèmes et de langue etc...
Maintenant, il me reste la lisaison des données, et je suis confronté à un énorme problème...
Je peux utiliser pour récupérer des données :
- Une api propre à la BDD (mysqli, ...)
- Une couche d'abstraction (Pdo, ...)
- Un ORM (ezPDO, Doctrine, Popel)
- Quelque chose fait soit même, qui permet de faire de l'abstraction tout en permettant de ce passer de 50% du code sql....
Pour l'instant je penche sur la dernière solution qui consiste à faire un générateur de code Bo/Dao à partir de la représntation XML d'une BDD (Générer via logiciel tiers Dbdesigner 4 par exemple).Les Bo ne pose pas de problème, les DAO ne pourront que faire des requetes CRUD sur les Bo(Objets). Tout en proposant une solutions simples pour les requetes plus compliqué...
Mais avant de continuer tête baisser dans mon double projet. Je voulais avoir votre avis sur l'ORM... En effet je pense qu'il est beaucoup trop lourd niveau performance pour un jeu PHP qui fait énormément d'appel à la bdd. Mais je consoit qu'il facilite grandement le coté développement.
Tout simplement imaginons que j'ai une table book avec 10champs, et que je veux n'afficher que le nom du livre. En sql simple suffit de faire "SELECT book_name FROM book..."
Mais avec n'importe quel ORM, il récupère l'objet entier... Et donc les 10 champs.Niveau optimisation on a connu mieux...
Ayant en vu par exemple Stargate-Univers où on avait voulut séparer le serveur BDD du serveur PHP. La bande passante entre le serveur BDD et le serveur PHP serait cramé en un rien de temps...
Donc dans ce sens je pense qu'un ORM est inutilisable si on fait un jeu compliqué et lourd et qu'on vise de nombreux joueurs, avec de petit moyen en machine. Le plus optimisé serai de tout faire à la mano selon moi. Mais bon vous en pensez quoi ?
Ca ressemble un peu au débat procédurale/objet, sauf que dans l'exemple de Stargate Univers, PHP utilise moins de 15% du serveur, alors que mysql est extrèmement gourmand avec plus 70% du serveur.
Dons si le combat où le procédurale gagne en optimisaton face à l'objet, la différence de performance est largement contestable, or avec une base de donnée (Mysql par exemple, quand meme la plus rapide), on ne peut pas oublier l'optimisation...
PS : J'ai juste survoler la liste des ORM, mais j'ai lu toute la doc d'EZPDO, et il n'y a pas de possibilité pour par exemple prendre que le champs nom d'une table.
Propel est super efficace pour la gnération de BDD et d'objet, mais il me semble pas avoir vu aussi le même point dans la doc de symfony...