Hi,
svp je veux savoir s'il y a un module perl qui assure la connexion persistante a mysql sachant que ceci est possible avec php
thnxutilistation de mysql_pconnect
Hi,
svp je veux savoir s'il y a un module perl qui assure la connexion persistante a mysql sachant que ceci est possible avec php
thnxutilistation de mysql_pconnect
elle est persistante par default: c'est DBD::mysql qui gere la chose de maniere transparente. Tant que tu ne detruit pas ton $dbh la connexion reste active (sous reserve d'un timeout evidemment).
Par contre evidemment la chose est differente si tu es en CGI, puisque le processus meurt à la fin de chaque requete, et que tu dois donc réouvrire une nouvelle connexion. Dans ce cas il faut utiliser FastCGI ou mod_perl (equivalent à mod_php pour perl)
merci pospos
cela vrai dans un seul programme !! dans mon cas le numbre des programmes lance pour arriver a n>100 et ceci va genere le problem de too many connection et tous c program demande une connexion to mysql
1ere solution a ete d'utiliser mysql_pconnect mais avec php je veux savoir si ceci est possible avec perl ?
je ne comprend pas ton problème
tu lance plusieurs scripts? Si oui alors c'est normal que chaque script ai besoin de sa propre connexion, il n'y a pas moyen de faire autrement (ni en php).
Si tout est dans le meme script alors il faut ouvrire une seule connexion et n'utiliser que celle la.
no c possible avec php
mysql_pconnect() se comporte exactement comme mysql_connect(), mais avec deux différences majeures :
Premièrement, lors de la connexion, la fonction essaie de trouver une connexion permanente déjà ouverte sur cet hôte, avec le même nom d'utilisateur et de mot de passe. Si une telle connexion est trouvée, son identifiant est retourné, sans ouvrir de nouvelle connexion.
Deuxièmement, la connexion au serveur MySQL ne sera pas terminée avec la fin du script. Au lieu de cela, le lien sera conservé pour un prochain accès (mysql_close() ne terminera pas une connexion persistante établie par mysql_pconnect()).
mais avec perl je sais pas !!!!
Heu tu peut tenter une architecture " décentralisé " du genre
ton script ouvre un socket vers le "provider sql" en spécifiant le nom de la connexion (si ta plusieurs serveur sql), tu envoie aussi la requete a adresser , les données a prendre dans la dbd , et le type de retour de données[script] <---> [provider sql] <---> [mysql]
exemple :
tu sérialise le hash avec storable tu le balance a travers le séreau , tu désérialiez au niveau du provider tu effectue les opérations puis le provider sérialise sont hash et le rebalance sur la meme socket
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 $requete = { 'conn_name' => 'serveur 1', 'conn_request' => 'la requete', 'conn_request_arg' => [$i,$m,$...] || undef, 'conn_return' => hash, array, single };
Le provider pourrais renvoyer les données comme suit
on pourrais imaginer ajouter un argument au provider en lui disant de mettre la requete en cache
Code : Sélectionner tout - Visualiser dans une fenêtre à part $retour = { 'conn_return' => [], {}, string };
ou meme combien de temps la garder
Code : Sélectionner tout - Visualiser dans une fenêtre à part 'conn_cache' => y || n
Mais pour éviter un timeout du provider utiliser sous win32 (pas tester sous nux et autre), faire un :
Code : Sélectionner tout - Visualiser dans une fenêtre à part 'conn_refresh' => 600 s -> 10 mn
use PerlEx:BI (); qui garantie un connexion permanente au lieu de use DBI;
Edit : Chui pas cinglé juste maso
naourass, ce que tu decrit n'est possible que dans un environnemlent persistant type mod_php, et donc si tu veux le reproduire en perl (et que tu es bien dans l'optique de faire un script web...) il te faut, comme je te l'expliquais dans ma premiere reponse, utiliser mod_perl ou fastCGI pour avoir un environnement persistant. Car si ton interpreteur est fermé alors toutes ses connexions serton elles aussi fermée, quelque soit le language le pays le lieu l'année le jour ou leur mère. une connexion c'est un socket.
Une fois que tu a ton environnement persistant alors oui tu peux garder ta connexion ouverte (il suffit de garder ton handler de database), sinon non.
Et c'est impossible de serialiser un socket (on peu le passer d'un process à l'autre sous unix, mais c'est assez galere, et il faudrait en plus conserver l'objet).
Il existe dans DBI une option pour garder en cache une connexion (cad reprendre une connexion existante plutot qu'en ouvrire une nouvelle) mais ca revient exactement au meme que de garder ton $dbh: si ton process se termine c'est fini.
Donc decrit nous exactement ton environnement (apache?) et ce que tu veux faire, et pourkoi tu a besoin d'autant de scripts en //.
Hi,
merci a vous tous sur les explication le module Apache:BI qui ne va ouvrir la connection qu'une seule fois
http://search.cpan.org/~pgollucci/Ap.../Apache/DBI.pm
ce module a besoin de mod_perl (d'ou ma question). De plus il ne partage pas de connexion entre les differents process: il permet juste à un process de conserver sa connexion d'une requete à l'autre
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager