… ou pas.
Symfony, pour ceux qui ne connaissent pas encore, est un framework PHP puissant et français, développé par Sensio Labs.
Contrairement à d'autres framework qui réinventent la roue, symfony s'appuie sur des librairies externes qui ont fait leur preuve. C'est précisément le cas pour l'ORM.
Dans ses premières versions, symfony n'intégrait que Propel et le changement d'ORM était relativement difficile, malgré l'existence d'un plugin Doctrine, car certains outils du framework, notament l'Admin Generator, s'appuyait uniquement sur Propel.
Depuis la version 1.1, Propel est un plugin et ne fait plus parti du core de symfony. Depuis la version 1.2, l'Admin Generator peut utiliser indifféremment Propel ou Doctrine. C'est une très bonne nouvelle pour la communauté. Du coup, chaque développeur peut choisir l'ORM qui lui convient le mieux... mais aussi se poser la question fatidique "Quel est le meilleur ORM ?"
Cette question, je me la suis, moi-même posée.
Pour y répondre, il faut prendre en compte plusieurs points (liste non exhaustive et non ordonnée):
Et c'est sur ce dernier point (pas forcément le plus important) que je suis me suis penché car j'ai lu à divers endroits que Doctrine était sacrément plus lent que Propel.
J'ai donc commencé à faire quelques benchmark. Ou plutôt une "plateforme" de benchmark qui n'attend que vous pour être complétée. En effet:
J'ai donc publié le code sur googlecode et l'accès au svn vous sera ouvert sur simple demande (mail/msn/gtalk de contact en haut à droite de ce blog).
url du projet: http://benchsymfonyorm.googlecode.com
Le projet contient un répertoire pour chaque ORM avec, à l'intérieur, un projet symfony.
J'ai séparé chaque ORM dans un projet différent car l'utilisation de Propel et Doctrine pourrait fausser les résultats.
Les benchs sont tous dans des task afin que le serveur web n'influe pas sur les résultats.
Les remarques constructives sont évidemment les bienvenues. Les trolls velus totalement interdits et carrément supprimés des commentaires s'ils montrent le bout de leur nez.
Comme dit plus haut, je ne prétends pas avoir faire un système parfait et les améliorations sont donc les bienvenues... en fait, c'est un peu le but de ce projet :)
Gaëtan
16 février 2009 à 13h34
Je squatte, c’est une super initiative, camarade symfonien =)
tight
17 février 2009 à 09h14
Jette un oeil à ce post sur le blog de François Zaninotto (ex contributeur de Symfony) http://redotheweb.com/2008/07/08/comparing-propel-doctrine-and-sfpropelfinder/, il devrait te donner une bonne base, et donne des pistes pour d’autres éléments à tester.
shouze
22 février 2009 à 17h27
Très bonne idée de comparer ces deux ORM ! Ce sont deux projets déjà très actifs et un peu d’émulation ne fera pas de mal, c’est en comparant qu’il est possible de faire avancer les équipes de ces deux projets qui nous sortent enfin du carcan de mysql_query() (je ne fais pas de discrimination, mais MySQL est le plus utilisé des SGBD à l’heure actuelle).
J’ai opté pour doctrine depuis quelques semaines déjà. Mon choix a été surtout guidé par la puissance et la souplesse du langage DQL.
Je pense que c’est un choix de design qui permet d’impacter directement les performances (comme éviter N requêtes SQL de Propel lorsque l’on peut en faire générer une seule par Doctrine).
Quant aux perfromances globales des 2 frameworks, Propel 1.3 et Doctrine utilisent PDO qui est la véritable pierre angulaire à mon avis (et qui commence à être mature, même sur des archis répliquées… pas comme il y a un an…). Grâce au mécanisme de préparation de requêtes MySQL gère mieux son cache (et oui, « SELECT * FROM table » et « Select * from table » sont 2 requêtes différentes pour MySQL, notez la sensibilité à la casse (entres autres)).
Dans le registre du cache de MySQL il faut savoir aussi que si une table contient au moins 1 champs texte > 255 caractères alors les requêtes pour cette table ne seront JAMAIS cachées en RAM… et là… on ne parle pas de perte de l’ordre de 20 à 30% de performance entre 2 frameworks, mais plutôt de l’ordre de temps d’accès entre RAM et disque dur… plutôt à l’heure actuelle d’ordre d’échelle 100 à 1000 !
Je voulais donc juste ajouter ce préambule pour que tout le monde comprenne réalise que quelque soit leur choix, Doctrine ou Propel, les deux reposent sur des avancées majeures de php (si seulement php pouvait avoir autant la classe syntaxiquement que python… et python les perfs de php !).
Que le meilleur de Doctrine ou Propel gagne !
Renaud
22 février 2009 à 22h27
Actuellement, le peu de tests que j’ai fait enterre Doctrine avec des scores allant de 3 à 10 fois plus lent que propel.
Mais effectivement, les temps de quelques requêtes ne sont pas forcément représentative de ce qui peux être utilisé en condition réelle.
ioniseurs
2 mars 2009 à 12h34
J’ai eu beaucoup de mal au début avec symfony !
Mais on s’y fait !
Bon courage pour les nouveaux !!
Gael
Doctrine vs Propel « Compléments pour les formations
30 novembre 2009 à 10h12
[...] Benchmark des deux ORM (Totalement Geek) [...]