J'ai un script perl qui va mettre a jour une table MySQL, il envoi des:
UPDATE STATS_Summary_Hourly SET
mails_total=(mails_total+1),mails_rbl=(mails_rbl+1),MO_received=(MO_received+650),MO_blocked=(MO_blocked+0.650)
WHERE dom_id=105 AND Date_Start="2015-04-15 01:00:00" AND
Date_End="2015-04-15 01:59:59";
UPDATE STATS_Summary_Hourly SET
mails_total=(mails_total+1),mails_rbl=(mails_rbl+1),MO_received=(MO_received+650),MO_blocked=(MO_blocked+0.650)
WHERE dom_id=105 AND Date_Start="2015-04-15 01:00:00" AND
Date_End="2015-04-15 01:59:59";
UPDATE STATS_Summary_Hourly SET
mails_total=(mails_total+1),mails_rbl=(mails_rbl+1),MO_received=(MO_received+650),MO_blocked=(MO_blocked+0.650)
WHERE dom_id=105 AND Date_Start="2015-04-15 01:00:00" AND
Date_End="2015-04-15 01:59:59";
UPDATE STATS_Summary_Hourly SET
mails_total=(mails_total+1),mails_rbl=(mails_rbl+1),MO_received=(MO_received+650),MO_blocked=(MO_blocked+0.650)
WHERE dom_id=105 AND Date_Start="2015-04-15 01:00:00" AND
Date_End="2015-04-15 01:59:59";
Mon soucis est qu'il exécute 5000 fois le même update.
Je me demandais si j'avais un moyen de créer une sorte de table en
mémoire qui permettrait de "résumer":
trois critères:
Dom_id
Date_Start
Date_End
et des données:
mails_total
mails_rbl
MO_received
MO_blocked
J'ai un script perl qui va mettre a jour une table MySQL, il envoi des:
[...]
Mon soucis est qu'il exécute 5000 fois le même update.
[...]
Je me demandais si j'avais un moyen de créer une sorte de table en mémoire qui permettrait de "résumer":
[...]
j'aurais réussi a "regrouper" (dans mon exemple) 117 requêtes update en deux requêtes ;=)
merci d'avance pour vos suggestions
Désoalé. Mais sans description ni du but général, ni des des tables utilisées (ici, je n'en vois qu'une) et en ne donnant comme seul exemple qu'un seul ordre SQL répété (pourquoi le répéter 5000 fois ?), je ne vois pas quelle suggestion faire... Si ce n'est d'exposer clairement le souci ! ;-)
-- Paul Gaborit - <http://perso.mines-albi.fr/~gaborit/> Perl en français - <http://perl.mines-albi.fr/>
J'ai un script perl qui va mettre a jour une table MySQL, il envoi des:
[...]
Mon soucis est qu'il exécute 5000 fois le même update.
[...]
Je me demandais si j'avais un moyen de créer une sorte de table en
mémoire qui permettrait de "résumer":
[...]
j'aurais réussi a "regrouper" (dans mon exemple) 117 requêtes update
en deux requêtes ;=)
merci d'avance pour vos suggestions
Désoalé. Mais sans description ni du but général, ni des des tables
utilisées (ici, je n'en vois qu'une) et en ne donnant comme seul exemple
qu'un seul ordre SQL répété (pourquoi le répéter 5000 fois ?), je ne
vois pas quelle suggestion faire... Si ce n'est d'exposer clairement le
souci ! ;-)
--
Paul Gaborit - <http://perso.mines-albi.fr/~gaborit/>
Perl en français - <http://perl.mines-albi.fr/>
J'ai un script perl qui va mettre a jour une table MySQL, il envoi des:
[...]
Mon soucis est qu'il exécute 5000 fois le même update.
[...]
Je me demandais si j'avais un moyen de créer une sorte de table en mémoire qui permettrait de "résumer":
[...]
j'aurais réussi a "regrouper" (dans mon exemple) 117 requêtes update en deux requêtes ;=)
merci d'avance pour vos suggestions
Désoalé. Mais sans description ni du but général, ni des des tables utilisées (ici, je n'en vois qu'une) et en ne donnant comme seul exemple qu'un seul ordre SQL répété (pourquoi le répéter 5000 fois ?), je ne vois pas quelle suggestion faire... Si ce n'est d'exposer clairement le souci ! ;-)
-- Paul Gaborit - <http://perso.mines-albi.fr/~gaborit/> Perl en français - <http://perl.mines-albi.fr/>
Benoit Izac
Bonjour,
le 15/04/2015 à 07:14, Chloe Sival a écrit dans le message <552df3c0$0$3162$ :
J'ai un script perl qui va mettre a jour une table MySQL, il envoi des:
UPDATE STATS_Summary_Hourly SET mails_total=(mails_total+1),mails_rbl=(mails_rbl+1),MO_received=(MO_received+650),MO_blocked=(MO_blocked+0.650) WHERE dom_id5 AND Date_Start="2015-04-15 01:00:00" AND Date_End="2015-04-15 01:59:59";
UPDATE STATS_Summary_Hourly SET mails_total=(mails_total+1),mails_rbl=(mails_rbl+1),MO_received=(MO_received+650),MO_blocked=(MO_blocked+0.650) WHERE dom_id5 AND Date_Start="2015-04-15 01:00:00" AND Date_End="2015-04-15 01:59:59";
UPDATE STATS_Summary_Hourly SET mails_total=(mails_total+1),mails_rbl=(mails_rbl+1),MO_received=(MO_received+650),MO_blocked=(MO_blocked+0.650) WHERE dom_id5 AND Date_Start="2015-04-15 01:00:00" AND Date_End="2015-04-15 01:59:59";
UPDATE STATS_Summary_Hourly SET mails_total=(mails_total+1),mails_rbl=(mails_rbl+1),MO_received=(MO_received+650),MO_blocked=(MO_blocked+0.650) WHERE dom_id5 AND Date_Start="2015-04-15 01:00:00" AND Date_End="2015-04-15 01:59:59";
Mon soucis est qu'il exécute 5000 fois le même update.
Je me demandais si j'avais un moyen de créer une sorte de table en mémoire qui permettrait de "résumer":
trois critères: Dom_id Date_Start Date_End
et des données: mails_total mails_rbl MO_received MO_blocked
Tu crées une table de hashage avec comme clé la contaténation des trois critères, ainsi tu n'auras plus de doublon :
my %tmp_db; my $dom = 105; my $start = "2015-04-15 01:00:00"; my $end = "2015-04-15 01:59:59"; my $k = "$dom,$start,$end"; $tmp_db{$k}{mails_total} = 35; # ...
for my $k (keys %tmp_db) { my ($dom, $start, $end) = split /,/, $k; my $mails_total = $tmp_db{$k}{mails_total}; # ... # envoi de la requête pour cette clé }
Bien évidemment, il faut trouver un séparateur qui n'apparait dans aucun des trois champs.
-- Benoit Izac
Bonjour,
le 15/04/2015 à 07:14, Chloe Sival a écrit dans le message
<552df3c0$0$3162$426a74cc@news.free.fr> :
J'ai un script perl qui va mettre a jour une table MySQL, il envoi des:
UPDATE STATS_Summary_Hourly SET
mails_total=(mails_total+1),mails_rbl=(mails_rbl+1),MO_received=(MO_received+650),MO_blocked=(MO_blocked+0.650)
WHERE dom_id5 AND Date_Start="2015-04-15 01:00:00" AND
Date_End="2015-04-15 01:59:59";
UPDATE STATS_Summary_Hourly SET
mails_total=(mails_total+1),mails_rbl=(mails_rbl+1),MO_received=(MO_received+650),MO_blocked=(MO_blocked+0.650)
WHERE dom_id5 AND Date_Start="2015-04-15 01:00:00" AND
Date_End="2015-04-15 01:59:59";
UPDATE STATS_Summary_Hourly SET
mails_total=(mails_total+1),mails_rbl=(mails_rbl+1),MO_received=(MO_received+650),MO_blocked=(MO_blocked+0.650)
WHERE dom_id5 AND Date_Start="2015-04-15 01:00:00" AND
Date_End="2015-04-15 01:59:59";
UPDATE STATS_Summary_Hourly SET
mails_total=(mails_total+1),mails_rbl=(mails_rbl+1),MO_received=(MO_received+650),MO_blocked=(MO_blocked+0.650)
WHERE dom_id5 AND Date_Start="2015-04-15 01:00:00" AND
Date_End="2015-04-15 01:59:59";
Mon soucis est qu'il exécute 5000 fois le même update.
Je me demandais si j'avais un moyen de créer une sorte de table en
mémoire qui permettrait de "résumer":
trois critères:
Dom_id
Date_Start
Date_End
et des données:
mails_total
mails_rbl
MO_received
MO_blocked
Tu crées une table de hashage avec comme clé la contaténation des trois
critères, ainsi tu n'auras plus de doublon :
my %tmp_db;
my $dom = 105;
my $start = "2015-04-15 01:00:00";
my $end = "2015-04-15 01:59:59";
my $k = "$dom,$start,$end";
$tmp_db{$k}{mails_total} = 35;
# ...
for my $k (keys %tmp_db) {
my ($dom, $start, $end) = split /,/, $k;
my $mails_total = $tmp_db{$k}{mails_total};
# ...
# envoi de la requête pour cette clé
}
Bien évidemment, il faut trouver un séparateur qui n'apparait dans aucun
des trois champs.
le 15/04/2015 à 07:14, Chloe Sival a écrit dans le message <552df3c0$0$3162$ :
J'ai un script perl qui va mettre a jour une table MySQL, il envoi des:
UPDATE STATS_Summary_Hourly SET mails_total=(mails_total+1),mails_rbl=(mails_rbl+1),MO_received=(MO_received+650),MO_blocked=(MO_blocked+0.650) WHERE dom_id5 AND Date_Start="2015-04-15 01:00:00" AND Date_End="2015-04-15 01:59:59";
UPDATE STATS_Summary_Hourly SET mails_total=(mails_total+1),mails_rbl=(mails_rbl+1),MO_received=(MO_received+650),MO_blocked=(MO_blocked+0.650) WHERE dom_id5 AND Date_Start="2015-04-15 01:00:00" AND Date_End="2015-04-15 01:59:59";
UPDATE STATS_Summary_Hourly SET mails_total=(mails_total+1),mails_rbl=(mails_rbl+1),MO_received=(MO_received+650),MO_blocked=(MO_blocked+0.650) WHERE dom_id5 AND Date_Start="2015-04-15 01:00:00" AND Date_End="2015-04-15 01:59:59";
UPDATE STATS_Summary_Hourly SET mails_total=(mails_total+1),mails_rbl=(mails_rbl+1),MO_received=(MO_received+650),MO_blocked=(MO_blocked+0.650) WHERE dom_id5 AND Date_Start="2015-04-15 01:00:00" AND Date_End="2015-04-15 01:59:59";
Mon soucis est qu'il exécute 5000 fois le même update.
Je me demandais si j'avais un moyen de créer une sorte de table en mémoire qui permettrait de "résumer":
trois critères: Dom_id Date_Start Date_End
et des données: mails_total mails_rbl MO_received MO_blocked
Tu crées une table de hashage avec comme clé la contaténation des trois critères, ainsi tu n'auras plus de doublon :
my %tmp_db; my $dom = 105; my $start = "2015-04-15 01:00:00"; my $end = "2015-04-15 01:59:59"; my $k = "$dom,$start,$end"; $tmp_db{$k}{mails_total} = 35; # ...
for my $k (keys %tmp_db) { my ($dom, $start, $end) = split /,/, $k; my $mails_total = $tmp_db{$k}{mails_total}; # ... # envoi de la requête pour cette clé }
Bien évidemment, il faut trouver un séparateur qui n'apparait dans aucun des trois champs.
-- Benoit Izac
espie
In article , Benoit Izac wrote:
Bonjour,
le 15/04/2015 à 07:14, Chloe Sival a écrit dans le message <552df3c0$0$3162$ :
J'ai un script perl qui va mettre a jour une table MySQL, il envoi des:
Tu crées une table de hashage avec comme clé la contaténation des trois critères, ainsi tu n'auras plus de doublon :
my %tmp_db; my $dom = 105; my $start = "2015-04-15 01:00:00"; my $end = "2015-04-15 01:59:59"; my $k = "$dom,$start,$end"; $tmp_db{$k}{mails_total} = 35; # ...
for my $k (keys %tmp_db) { my ($dom, $start, $end) = split /,/, $k; my $mails_total = $tmp_db{$k}{mails_total}; # ... # envoi de la requête pour cette clé }
Bien évidemment, il faut trouver un séparateur qui n'apparait dans aucun des trois champs.
Pourquoi faire ? on est en 2015, tous les perl existants font de l'autovivification, et avoir un hash a 3 niveaux est raisonnablement simple.
In article <871tjln83s.fsf@izac.org>, Benoit Izac <benoit.izac@free.fr> wrote:
Bonjour,
le 15/04/2015 à 07:14, Chloe Sival a écrit dans le message
<552df3c0$0$3162$426a74cc@news.free.fr> :
J'ai un script perl qui va mettre a jour une table MySQL, il envoi des:
Tu crées une table de hashage avec comme clé la contaténation des trois
critères, ainsi tu n'auras plus de doublon :
my %tmp_db;
my $dom = 105;
my $start = "2015-04-15 01:00:00";
my $end = "2015-04-15 01:59:59";
my $k = "$dom,$start,$end";
$tmp_db{$k}{mails_total} = 35;
# ...
for my $k (keys %tmp_db) {
my ($dom, $start, $end) = split /,/, $k;
my $mails_total = $tmp_db{$k}{mails_total};
# ...
# envoi de la requête pour cette clé
}
Bien évidemment, il faut trouver un séparateur qui n'apparait dans aucun
des trois champs.
Pourquoi faire ? on est en 2015, tous les perl existants font de
l'autovivification, et avoir un hash a 3 niveaux est raisonnablement simple.
Tu crées une table de hashage avec comme clé la contaténation des trois critères, ainsi tu n'auras plus de doublon :
my %tmp_db; my $dom = 105; my $start = "2015-04-15 01:00:00"; my $end = "2015-04-15 01:59:59"; my $k = "$dom,$start,$end"; $tmp_db{$k}{mails_total} = 35; # ...
for my $k (keys %tmp_db) { my ($dom, $start, $end) = split /,/, $k; my $mails_total = $tmp_db{$k}{mails_total}; # ... # envoi de la requête pour cette clé }
Bien évidemment, il faut trouver un séparateur qui n'apparait dans aucun des trois champs.
Pourquoi faire ? on est en 2015, tous les perl existants font de l'autovivification, et avoir un hash a 3 niveaux est raisonnablement simple.
Tu crées une table de hashage avec comme clé la contaténation des trois critères, ainsi tu n'auras plus de doublon :
[... snip le code ...]
Votre boule de cristal semble en meilleur état que la mienne pour réussir à comprendre la demande initiale. Il faut que je l'amène en révision.
-- Paul Gaborit - <http://perso.mines-albi.fr/~gaborit/> Perl en français - <http://perl.mines-albi.fr/>
Benoit Izac
Bonjour,
le 15/04/2015 à 15:03, Marc Espie a écrit dans le message <mglnju$11gc$ :
Tu crées une table de hashage avec comme clé la contaténation des trois critères, ainsi tu n'auras plus de doublon :
my %tmp_db; my $dom = 105; my $start = "2015-04-15 01:00:00"; my $end = "2015-04-15 01:59:59"; my $k = "$dom,$start,$end"; $tmp_db{$k}{mails_total} = 35; # ...
for my $k (keys %tmp_db) { my ($dom, $start, $end) = split /,/, $k; my $mails_total = $tmp_db{$k}{mails_total}; # ... # envoi de la requête pour cette clé }
Bien évidemment, il faut trouver un séparateur qui n'apparait dans aucun des trois champs.
Pourquoi faire ? on est en 2015, tous les perl existants font de l'autovivification, et avoir un hash a 3 niveaux est raisonnablement simple.
Donc tu proposes :
my %tmp_db; my $dom = 105; my $start = "2015-04-15 01:00:00"; my $end = "2015-04-15 01:59:59"; $tmp_db{$dom}{$start}{$end}{mails_total} = 35; # ...
for my $dom (keys %tmp_db) { for my $start (keys %{$tmp_db{$dom}}) { for my $end (keys %{$tmp_db{$dom}{$start}}) { my $mails_total = $tmp_db{$dom}{$start}{$end}{mails_total}; # ... } } }
C'est bien cela ?
-- Benoit Izac
Bonjour,
le 15/04/2015 à 15:03, Marc Espie a écrit dans le message
<mglnju$11gc$1@saria.nerim.net> :
Tu crées une table de hashage avec comme clé la contaténation des trois
critères, ainsi tu n'auras plus de doublon :
my %tmp_db;
my $dom = 105;
my $start = "2015-04-15 01:00:00";
my $end = "2015-04-15 01:59:59";
my $k = "$dom,$start,$end";
$tmp_db{$k}{mails_total} = 35;
# ...
for my $k (keys %tmp_db) {
my ($dom, $start, $end) = split /,/, $k;
my $mails_total = $tmp_db{$k}{mails_total};
# ...
# envoi de la requête pour cette clé
}
Bien évidemment, il faut trouver un séparateur qui n'apparait dans aucun
des trois champs.
Pourquoi faire ? on est en 2015, tous les perl existants font de
l'autovivification, et avoir un hash a 3 niveaux est raisonnablement
simple.
Donc tu proposes :
my %tmp_db;
my $dom = 105;
my $start = "2015-04-15 01:00:00";
my $end = "2015-04-15 01:59:59";
$tmp_db{$dom}{$start}{$end}{mails_total} = 35;
# ...
for my $dom (keys %tmp_db) {
for my $start (keys %{$tmp_db{$dom}}) {
for my $end (keys %{$tmp_db{$dom}{$start}}) {
my $mails_total = $tmp_db{$dom}{$start}{$end}{mails_total};
# ...
}
}
}
le 15/04/2015 à 15:03, Marc Espie a écrit dans le message <mglnju$11gc$ :
Tu crées une table de hashage avec comme clé la contaténation des trois critères, ainsi tu n'auras plus de doublon :
my %tmp_db; my $dom = 105; my $start = "2015-04-15 01:00:00"; my $end = "2015-04-15 01:59:59"; my $k = "$dom,$start,$end"; $tmp_db{$k}{mails_total} = 35; # ...
for my $k (keys %tmp_db) { my ($dom, $start, $end) = split /,/, $k; my $mails_total = $tmp_db{$k}{mails_total}; # ... # envoi de la requête pour cette clé }
Bien évidemment, il faut trouver un séparateur qui n'apparait dans aucun des trois champs.
Pourquoi faire ? on est en 2015, tous les perl existants font de l'autovivification, et avoir un hash a 3 niveaux est raisonnablement simple.
Donc tu proposes :
my %tmp_db; my $dom = 105; my $start = "2015-04-15 01:00:00"; my $end = "2015-04-15 01:59:59"; $tmp_db{$dom}{$start}{$end}{mails_total} = 35; # ...
for my $dom (keys %tmp_db) { for my $start (keys %{$tmp_db{$dom}}) { for my $end (keys %{$tmp_db{$dom}{$start}}) { my $mails_total = $tmp_db{$dom}{$start}{$end}{mails_total}; # ... } } }
C'est bien cela ?
-- Benoit Izac
Benoit Izac
Bonjour,
le 15/04/2015 à 16:50, Paul Gaborit a écrit dans le message :
Tu crées une table de hashage avec comme clé la contaténation des trois critères, ainsi tu n'auras plus de doublon :
[... snip le code ...]
Votre boule de cristal semble en meilleur état que la mienne pour réussir à comprendre la demande initiale. Il faut que je l'amène en révision.
La seule chos que j'ai compris, c'est qu'elle veut éviter d'envoyer la même requête SQL un grand nombre de fois et qu'elle souhaiterai donc stocker dans une base de donnée "temporaire" (je le comprends comme "en mémoire") avant d'envoyer les requêtes nécessaires à la mise à jour de la base SQL.
Je ne comprends pas non plus le pourquoi du comment de ces 5000 répétitions et je trouve ça également surprenant si ça peut rassurer sur le mauvais état de la sphère divine.
-- Benoit Izac
Bonjour,
le 15/04/2015 à 16:50, Paul Gaborit a écrit dans le message
<wt9twwhtpid.fsf@mirabeau.mines-albi.fr> :
Tu crées une table de hashage avec comme clé la contaténation des trois
critères, ainsi tu n'auras plus de doublon :
[... snip le code ...]
Votre boule de cristal semble en meilleur état que la mienne pour
réussir à comprendre la demande initiale. Il faut que je l'amène en
révision.
La seule chos que j'ai compris, c'est qu'elle veut éviter d'envoyer la
même requête SQL un grand nombre de fois et qu'elle souhaiterai donc
stocker dans une base de donnée "temporaire" (je le comprends comme "en
mémoire") avant d'envoyer les requêtes nécessaires à la mise à jour de
la base SQL.
Je ne comprends pas non plus le pourquoi du comment de ces 5000 répétitions
et je trouve ça également surprenant si ça peut rassurer sur le mauvais
état de la sphère divine.
le 15/04/2015 à 16:50, Paul Gaborit a écrit dans le message :
Tu crées une table de hashage avec comme clé la contaténation des trois critères, ainsi tu n'auras plus de doublon :
[... snip le code ...]
Votre boule de cristal semble en meilleur état que la mienne pour réussir à comprendre la demande initiale. Il faut que je l'amène en révision.
La seule chos que j'ai compris, c'est qu'elle veut éviter d'envoyer la même requête SQL un grand nombre de fois et qu'elle souhaiterai donc stocker dans une base de donnée "temporaire" (je le comprends comme "en mémoire") avant d'envoyer les requêtes nécessaires à la mise à jour de la base SQL.
Je ne comprends pas non plus le pourquoi du comment de ces 5000 répétitions et je trouve ça également surprenant si ça peut rassurer sur le mauvais état de la sphère divine.