Cette article s’inspire de l’article de Tony Landis. Dans un nouveau projet PHP est-ce que vous privilégiez l’utilisation de PDO ou d’ADOdb5 ? Personnellement, je croyais qu’ADOdb était mort et enterré. Mais en me rendant sur le site du projet, j’ai pu constater que ce n’était pas du tout le cas et qu’il y avait une version récente du projet. Il est intéressant de constater que la plus récente version à été réécrite en PHP 5 et supporte un plus grand nombre de pilote que PDO. Évidemment, si on utilise une seule source de données, il n’y a aucun bénéfice à en tirer.
Mon expérience
Bon, personnellement, j’avais développé une mini couche d’abstraction par dessus les fonctions natives de MySQL en prévision de pouvoir l’étendre facilement à d’autres pilotes un jour, mais après 8 ans de développement, je peux dire que c’était inutile. L’ajout de PDO à mon cadre de développement (framework) m’apporterait plusieurs avantages. Premièrement, cela me permettrait de me débarrasser de la maintenance de cette partie de code et des lacunes associées. Deuxièmement, les performances de PDO semblent surpasser celles des fonctions natives de MySQL. Enfin, cela me permettrait de pouvoir utiliser enfin les transactions ainsi que les requêtes SQL préparées, fonctionnalités qui n’étaient pas présentes dans mon cadre de développement. C’est le cas classique quoi ! Qui n’a pas réinventé la roue ? Il me resterait donc par la suite à me débarrasser de mon cadre de développement personnel. 🙂
Application existante
Je dois continuer à faire évoluer une application de 8 ans d’âge dont l’auteur originel avait fait le choix d’utiliser ADOdb. À l’époque PDO n’existait pas. Serait-il plus intéressant de remplacer le vieux ADOdb par PDO ou bien par ADOdb5 ? En terme de performance, je pense que PDO doit être supérieur puisque natif au langage alors qu’ADOdb5 est une surcouche écrite en PHP. Par contre, il ne faut pas négliger le temps requis pour adapter le code à PDO. Pour cette raison, je crois qu’il serait plus rapide et aisé de migrer vers ADOdb5 dans une première étape.
Données utilisées
Afin de s’amuser un peu, j’ai profilé PDO versus ADOdb5 juste pour avoir une idée de la différence de performance. J’ai utilisé les données de la base de données d’adresses IP relatives aux pays. Notre version en place n’était pas la plus récente à ce jour et elle contenait 151532 enregistrements.
Code utilisé
Code utilisé pour profiler PDO.
$db = new PDO( 'mysql:dbname=iptocountry;host=127.0.0.1', 'root', '****' );
$start = microtime( true );
$rs = $db->query( 'select * from iptocountry' )->fetchAll(PDO::FETCH_ASSOC);
foreach($rs as $r) {}
$end = microtime( true );
echo 'RESULTS PDO: ' . ( $end - $start ) . PHP_EOL; |
$db = new PDO( 'mysql:dbname=iptocountry;host=127.0.0.1', 'root', '****' );
$start = microtime( true );
$rs = $db->query( 'select * from iptocountry' )->fetchAll(PDO::FETCH_ASSOC);
foreach($rs as $r) {}
$end = microtime( true );
echo 'RESULTS PDO: ' . ( $end - $start ) . PHP_EOL;
Code utilisé pour profiler ADOdb5.
require_once( 'adodb5/adodb.inc.php' );
$ADODB_FETCH_MODE = ADODB_FETCH_ASSOC;
$db = NewADOConnection( 'mysql://root:****@127.0.0.1/iptocountry' );
$start = microtime( true );
$rs = $db->Execute( 'select * from iptocountry' );
foreach($rs as $r) {}
$end = microtime( true );
echo 'RESULTS ADO: ' . ( $end - $start ) . PHP_EOL; |
require_once( 'adodb5/adodb.inc.php' );
$ADODB_FETCH_MODE = ADODB_FETCH_ASSOC;
$db = NewADOConnection( 'mysql://root:****@127.0.0.1/iptocountry' );
$start = microtime( true );
$rs = $db->Execute( 'select * from iptocountry' );
foreach($rs as $r) {}
$end = microtime( true );
echo 'RESULTS ADO: ' . ( $end - $start ) . PHP_EOL;
Résultats du profilage
|
PDO |
ADOdb5 |
1 |
0.55663919448853 |
1.273540019989 |
2 |
0.56437802314758 |
1.2905249595642 |
3 |
0.56191086769104 |
1.2566349506378 |
4 |
0.56436491012573 |
1.2649390697479 |
5 |
0.55612802505493 |
1.2778210639954 |
6 |
0.54797792434692 |
1.2488679885864 |
7 |
0.55668902397156 |
1.2327320575714 |
8 |
0.5615439414978 |
1.2574291229248 |
9 |
0.55743288993835 |
1.2485709190369 |
10 |
0.56768417358398 |
1.2800159454346 |
MOYENNE |
0.5594748974 |
1.2631076097 |
On peu donc affirmer que PDO est environ 2.2 fois plus rapide que ADOdb5. Par contre, pour les besoins actuels, je dois considérer le temps requis pour faire les changements nécessaires à l’application pour supporter PDO versus ADOdb5. J’irai donc tout de même avec ADOdb5.
Qu’elle est votre expérience avec ces deux outils ? Avez-vous trouvé mieux ?