Zend FR

Consultez la FAQ sur le ZF avant de poster une question

Vous n'êtes pas identifié.

#1 18-04-2010 07:10:37

matmat
Nouveau membre
Date d'inscription: 18-04-2010
Messages: 3

Utiliser une connection PDO existante

Bonjour,

J'ai besoin du composant Zend_Db, et j'ai aussi besoin que mon application soit très réactive avec le cache.
J'ai remarqué que le composant Zend_Db est asser long à charger, je voudrais le charger uniquement si la page n'est pas dans le cache.
Seulement, j'ai besoin de me connecter a la base de données avant la mise en cache.
Mon idée c'est donc de faire un simple connections PDO au début, qui suffit largement pour faire les deux requête super simple avant l'appel du cache et ensuite de me connecter via zend_db.
Je me demandais donc si il existe une méthode pour réutiliser une connections PDO déjà initialisé genre setConnection($db).
Première question est ce que c'est utile?, en effet, il n'y pas vraiment de différence dans le temps d'exécution si la connections est refaite.
Si cela est utile est ce que cette méthode vous semble correcte?

mon fichier ZendConnecter.php

Code:

require_once 'Zend/Db/Adapter/Pdo/Mysql.php';

class Zend_Connecter extends Zend_Db_Adapter_Pdo_Mysql 
{
    public function setConnection($db){
        $this->_connection = $db;
        return $this->_connection;
    }
}

Code:

$config['host'] = 'localhost';
$config['username'] = 'root';
$config['password'] = '';
$config['dbname'] = 'mydb';

$db = new PDO('mysql:host='.$config['host'].'dbname='.$config['dbname'],
$config['username'],$config['password']);

//quelques connections simple et rapides ici

if (!($data = $cache->load($id))) {

    require_once 'ZendConnecter.php';

    $zenddb = new Zend_Connecter($config);
    $zenddb->setConnection($db);

    //ici pleins de requêtes avec l'aide de zend :)

    $cache->save($data);


}

Ou bien en recréant la connexion:

Code:

$db = new PDO('mysql:host='.$config['host'].'dbname='.$config['dbname'],
$config['username'],$config['password']);

//quelques connections simple et rapides ici

if (!($data = $cache->load($id))) {

    require_once 'Zend/Db.php';

    $db = Zend_Db::factory('Pdo_Mysql',$config);

    //ici pleins de requêtes avec l'aide de zend :)

    $cache->save($data);


}

Ou bien y a t'il une autre méthode?

Dernière modification par matmat (18-04-2010 07:16:24)

Hors ligne

 

#2 18-04-2010 14:15:08

mikaelkael
Administrateur
Lieu: Donges
Date d'inscription: 18-06-2007
Messages: 1176
Site web

Re: Utiliser une connection PDO existante

Ne serais-tu pas sous Windows sans APC ?


Less code = less bugs
Contributeur ZF - ZCE - ZFCE - Doc ZF (CHM & PDF) - Vice-trésorier AFUP 2011
Ubuntu 11.04 - ZendServer

Hors ligne

 

#3 18-04-2010 21:32:49

matmat
Nouveau membre
Date d'inscription: 18-04-2010
Messages: 3

Re: Utiliser une connection PDO existante

Sous windows en développement, puis avec un serveur LINUX/Centos sur lequel n'est pas installer APC effectivement, je pourrais le faire mais comme je pense utiliser cette appli aussi sur des serveurs partagé j'hésite à que APC soit une obligation.

Edit: J'ai zend optimizer installé sur le serveur, je l'ai désactivé et activé APC, après un test rapide c'est plus rapide que APC. Il y a t'il une raison particulière d'utiliser APC pour résoudre ce problème?

Dernière modification par matmat (18-04-2010 22:24:08)

Hors ligne

 

#4 19-04-2010 10:44:03

mikaelkael
Administrateur
Lieu: Donges
Date d'inscription: 18-06-2007
Messages: 1176
Site web

Re: Utiliser une connection PDO existante

Hello,

Un accélérateur d'opcode est nécessaire pour la performance car un framework est éclaté en plusieurs fichiers (APC ou Zend Optimizer). Quand je suis sous Windows, les perf sont catastrophiques principalement à cause du filesystem. En prod, avec apc.stat=0 ou zend_optimizerplus.validate_timestamps=0, les performances générales (et de Zend_Db en particulier) sont très bonnes.

Mets-tu en cache tes metadata ?

Plus d'infos : http://framework.zend.com/manual/fr/performance.html

@+


Less code = less bugs
Contributeur ZF - ZCE - ZFCE - Doc ZF (CHM & PDF) - Vice-trésorier AFUP 2011
Ubuntu 11.04 - ZendServer

Hors ligne

 

#5 19-04-2010 16:26:30

matmat
Nouveau membre
Date d'inscription: 18-04-2010
Messages: 3

Re: Utiliser une connection PDO existante

Salut,

Merci pour tes réponses, c'est très intéressant.

Je n'ai pas les metadata en cache, et effectivement je vais essayé, surtout pour certaine tables qui n'évolueront pas ou peu.

En fait je trouve les performances de Zend_Db plutôt bonnes, par contre ce qui me pose problème c'est de devoir de devoir charger le module avant le cache.

En effet dans ce cas la moitié du temps de génération de la page est dédié au chargement du composant!

En exemple:

Connexion PDO:

0ms
Chargement des fichier de bases
3ms
connection PDO
4ms
Requetes visiteur
Requetes slug/urlrewiting
4ms
récuperations des en fichier caches
3ms

Total 15ms

Connexion Zend_DB:

0ms
Chargement des fichier de bases
3ms
Chargement des fichier de Zend_Db
4ms
connection Zend_Db_PDO
16ms
Requetes visiteur
Requetes slug/urlrewiting
4ms
récuperations des en fichier caches
3ms

Total 30ms

les requêtes avec zend_db sont très efficaces, même des fois select() les écrit mieux que les miennes! Le problème n'est pas là, le problème c'est que je ne voudrais pas charger zend_db pour faire mes connexions visiteur et slug qui sont les seules requêtes que je fais en dehors du cache. Après un fois dans le cache 20ms de plus ou du moins ne me pose aucun problème.

Cela parait un peu exagérer de se prendre la tête pour 15ms, mais se sont des résultats obtenus quand la machine est complètement disponible et ceci varie bien évidement selon les requêtes du moment, comme ces fichiers étant donné qu'il ne sont pas dans le cache seront sollicités en permanence je voudrait qu'ils soient super optimisés.

Dernière modification par matmat (19-04-2010 17:05:06)

Hors ligne

 

Pied de page des forums

Propulsé par PunBB
© Copyright 2002–2005 Rickard Andersson
Traduction par punbb.fr

Graphisme réalisé par l'agence Rodolphe Eveilleau
Développement par Kitpages