je suis en train de revoir un ancien script perl
que j'avais fait (attention je suis debutante).
Ce script interroge une base MySQL mais je le trouve
tres lents du avant tous a de multiple requete identique.
J'aimerais donc savoir si il est possible de faire une requete
unique sur une table qui va recuperer tous les enregistrements
(20 ene d'enregistrement a 4 champs) de celle ci, les mettres dans
un tableau memoire et qu'ensuite je puisse l'interroger "en memoire"
Comment je peux faire cela ?
je suis en train de revoir un ancien script perl
que j'avais fait (attention je suis debutante).
Ce script interroge une base MySQL mais je le trouve
tres lents du avant tous a de multiple requete identique.
J'aimerais donc savoir si il est possible de faire une requete
unique sur une table qui va recuperer tous les enregistrements
(20 ene d'enregistrement a 4 champs) de celle ci, les mettres dans
un tableau memoire et qu'ensuite je puisse l'interroger "en memoire"
Comment je peux faire cela ?
je suis en train de revoir un ancien script perl
que j'avais fait (attention je suis debutante).
Ce script interroge une base MySQL mais je le trouve
tres lents du avant tous a de multiple requete identique.
J'aimerais donc savoir si il est possible de faire une requete
unique sur une table qui va recuperer tous les enregistrements
(20 ene d'enregistrement a 4 champs) de celle ci, les mettres dans
un tableau memoire et qu'ensuite je puisse l'interroger "en memoire"
Comment je peux faire cela ?
Bonjour,
je suis en train de revoir un ancien script perl
que j'avais fait (attention je suis debutante).
Ce script interroge une base MySQL mais je le trouve
tres lents du avant tous a de multiple requete identique.
J'aimerais donc savoir si il est possible de faire une requete
unique sur une table qui va recuperer tous les enregistrements
(20 ene d'enregistrement a 4 champs) de celle ci, les mettres dans
un tableau memoire et qu'ensuite je puisse l'interroger "en memoire"
Bonjour,
je suis en train de revoir un ancien script perl
que j'avais fait (attention je suis debutante).
Ce script interroge une base MySQL mais je le trouve
tres lents du avant tous a de multiple requete identique.
J'aimerais donc savoir si il est possible de faire une requete
unique sur une table qui va recuperer tous les enregistrements
(20 ene d'enregistrement a 4 champs) de celle ci, les mettres dans
un tableau memoire et qu'ensuite je puisse l'interroger "en memoire"
Bonjour,
je suis en train de revoir un ancien script perl
que j'avais fait (attention je suis debutante).
Ce script interroge une base MySQL mais je le trouve
tres lents du avant tous a de multiple requete identique.
J'aimerais donc savoir si il est possible de faire une requete
unique sur une table qui va recuperer tous les enregistrements
(20 ene d'enregistrement a 4 champs) de celle ci, les mettres dans
un tableau memoire et qu'ensuite je puisse l'interroger "en memoire"
Il est possible de faire plein de choses. A la limite, montrez-nous
le bout qui va bien de votre script, on vous dira comment l'accelerer...
Il est possible de faire plein de choses. A la limite, montrez-nous
le bout qui va bien de votre script, on vous dira comment l'accelerer...
Il est possible de faire plein de choses. A la limite, montrez-nous
le bout qui va bien de votre script, on vous dira comment l'accelerer...
Il est possible de faire plein de choses. A la limite, montrez-nous
le bout qui va bien de votre script, on vous dira comment l'accelerer...
;=)
pour faire simple:
sub get_data_cdr {
$dbh = DBI->connect($connection_src,$userid_src,$passwd_src);
$query = "SELECT
calldate,clid,src,dst,dcontext,channel,dstchannel,lastapp,lastdata,duration,billsec,disposition
FROM $tb_source_ipbx";
$sth = $dbh->prepare($query);
$sth->execute();
while (my @ref = $sth->fetchrow_array()) {
## On mets en variable les champs de la base
$date_de_l_appel = @ref[0];
Bon, deja, ca c'est faux...
$clid = @ref[1];
$src = @ref[2];
$dst = @ref[3];
$dcontext = @ref[4];
$channel = @ref[5];
$dstchannel = @ref[6];
$lastapp = @ref[7];
$lastdata = @ref[8];
$duration = @ref[9];
$billsec = @ref[10];
$disposition = @ref[11];
##
## Execution des Traitements sur la ligne de données
&analyse_context;
}
}
Donc j'ai une base de données A que j'interroge ... pour chaque ligne je
lance l'analyse:
sub analyse_context {
$dbh_analyse_context =
DBI->connect($connection_dst,$userid_dst,$passwd_dst);
$query_analyse_context = "SELECT context,id_client,private,ipbx
FROM $tbl_script_context WHERE context='$dcontext'";
$sth_analyse_context =
$dbh_analyse_context->prepare($query_analyse_context);
$sth_analyse_context->execute();
@analyse_context=$sth_analyse_context->fetchrow_array();
$id_client=@analyse_context[1];
if (@analyse_context[0] eq $dcontext) {
??? probleme de requete, je presume.
if (@analyse_context[2] eq "0") {
if (@analyse_context[3] eq "0") {
&traitement_num_appele_ipbx;
}
&calcul_tarification;
&insertion_logs_details;
}
else {
if (@analyse_context[3] eq "0") {
&traitement_num_appele_ipbx;
}
&relation_private_clid;
&calcul_tarification;
&insertion_logs_details;
}
}
}
en resume, pour chaque ligne de la base A, je fais une requete sur la
Base B pour savoir l'id du client qui a genere la ligne sur la base A.
Ce que je trouve dommage dans mon script, c'est que la base B ne
contient que 20 clients ... alors si je pouvais en une seul requete
charger en memoire tous les client et apres interroge cette memoire sans
passer par une requete sql, je pense que cela serait plus rapide ;=)
Il est possible de faire plein de choses. A la limite, montrez-nous
le bout qui va bien de votre script, on vous dira comment l'accelerer...
;=)
pour faire simple:
sub get_data_cdr {
$dbh = DBI->connect($connection_src,$userid_src,$passwd_src);
$query = "SELECT
calldate,clid,src,dst,dcontext,channel,dstchannel,lastapp,lastdata,duration,billsec,disposition
FROM $tb_source_ipbx";
$sth = $dbh->prepare($query);
$sth->execute();
while (my @ref = $sth->fetchrow_array()) {
## On mets en variable les champs de la base
$date_de_l_appel = @ref[0];
Bon, deja, ca c'est faux...
$clid = @ref[1];
$src = @ref[2];
$dst = @ref[3];
$dcontext = @ref[4];
$channel = @ref[5];
$dstchannel = @ref[6];
$lastapp = @ref[7];
$lastdata = @ref[8];
$duration = @ref[9];
$billsec = @ref[10];
$disposition = @ref[11];
##
## Execution des Traitements sur la ligne de données
&analyse_context;
}
}
Donc j'ai une base de données A que j'interroge ... pour chaque ligne je
lance l'analyse:
sub analyse_context {
$dbh_analyse_context =
DBI->connect($connection_dst,$userid_dst,$passwd_dst);
$query_analyse_context = "SELECT context,id_client,private,ipbx
FROM $tbl_script_context WHERE context='$dcontext'";
$sth_analyse_context =
$dbh_analyse_context->prepare($query_analyse_context);
$sth_analyse_context->execute();
@analyse_context=$sth_analyse_context->fetchrow_array();
$id_client=@analyse_context[1];
if (@analyse_context[0] eq $dcontext) {
??? probleme de requete, je presume.
if (@analyse_context[2] eq "0") {
if (@analyse_context[3] eq "0") {
&traitement_num_appele_ipbx;
}
&calcul_tarification;
&insertion_logs_details;
}
else {
if (@analyse_context[3] eq "0") {
&traitement_num_appele_ipbx;
}
&relation_private_clid;
&calcul_tarification;
&insertion_logs_details;
}
}
}
en resume, pour chaque ligne de la base A, je fais une requete sur la
Base B pour savoir l'id du client qui a genere la ligne sur la base A.
Ce que je trouve dommage dans mon script, c'est que la base B ne
contient que 20 clients ... alors si je pouvais en une seul requete
charger en memoire tous les client et apres interroge cette memoire sans
passer par une requete sql, je pense que cela serait plus rapide ;=)
Il est possible de faire plein de choses. A la limite, montrez-nous
le bout qui va bien de votre script, on vous dira comment l'accelerer...
;=)
pour faire simple:
sub get_data_cdr {
$dbh = DBI->connect($connection_src,$userid_src,$passwd_src);
$query = "SELECT
calldate,clid,src,dst,dcontext,channel,dstchannel,lastapp,lastdata,duration,billsec,disposition
FROM $tb_source_ipbx";
$sth = $dbh->prepare($query);
$sth->execute();
while (my @ref = $sth->fetchrow_array()) {
## On mets en variable les champs de la base
$date_de_l_appel = @ref[0];
Bon, deja, ca c'est faux...
$clid = @ref[1];
$src = @ref[2];
$dst = @ref[3];
$dcontext = @ref[4];
$channel = @ref[5];
$dstchannel = @ref[6];
$lastapp = @ref[7];
$lastdata = @ref[8];
$duration = @ref[9];
$billsec = @ref[10];
$disposition = @ref[11];
##
## Execution des Traitements sur la ligne de données
&analyse_context;
}
}
Donc j'ai une base de données A que j'interroge ... pour chaque ligne je
lance l'analyse:
sub analyse_context {
$dbh_analyse_context =
DBI->connect($connection_dst,$userid_dst,$passwd_dst);
$query_analyse_context = "SELECT context,id_client,private,ipbx
FROM $tbl_script_context WHERE context='$dcontext'";
$sth_analyse_context =
$dbh_analyse_context->prepare($query_analyse_context);
$sth_analyse_context->execute();
@analyse_context=$sth_analyse_context->fetchrow_array();
$id_client=@analyse_context[1];
if (@analyse_context[0] eq $dcontext) {
??? probleme de requete, je presume.
if (@analyse_context[2] eq "0") {
if (@analyse_context[3] eq "0") {
&traitement_num_appele_ipbx;
}
&calcul_tarification;
&insertion_logs_details;
}
else {
if (@analyse_context[3] eq "0") {
&traitement_num_appele_ipbx;
}
&relation_private_clid;
&calcul_tarification;
&insertion_logs_details;
}
}
}
en resume, pour chaque ligne de la base A, je fais une requete sur la
Base B pour savoir l'id du client qui a genere la ligne sur la base A.
Ce que je trouve dommage dans mon script, c'est que la base B ne
contient que 20 clients ... alors si je pouvais en une seul requete
charger en memoire tous les client et apres interroge cette memoire sans
passer par une requete sql, je pense que cela serait plus rapide ;=)
Commencer par corriger tout vos @ref[n] -> $ref[n], apprenez a utiliser
les placeholder, eviter d'ouvrir et de fermer sans arret votre base
de donnees, et ca devrait aller bien plus vite.
En fait, tout se passerait beaucoup mieux si toutes les infos etaient
stockes dans deux tables de la meme base de donnees. Vous avez de vraies
raisons qui vous poussent a avoir deux bases separees ?
Commencer par corriger tout vos @ref[n] -> $ref[n], apprenez a utiliser
les placeholder, eviter d'ouvrir et de fermer sans arret votre base
de donnees, et ca devrait aller bien plus vite.
En fait, tout se passerait beaucoup mieux si toutes les infos etaient
stockes dans deux tables de la meme base de donnees. Vous avez de vraies
raisons qui vous poussent a avoir deux bases separees ?
Commencer par corriger tout vos @ref[n] -> $ref[n], apprenez a utiliser
les placeholder, eviter d'ouvrir et de fermer sans arret votre base
de donnees, et ca devrait aller bien plus vite.
En fait, tout se passerait beaucoup mieux si toutes les infos etaient
stockes dans deux tables de la meme base de donnees. Vous avez de vraies
raisons qui vous poussent a avoir deux bases separees ?