|
Publicité ' | |||||||||||||||||||||||
|
|
#1 |
|
Nouveau Membre du Club
![]() Inscription : décembre 2004 Messages : 69 ![]() |
Bonjour,
Je m'occupe d'un portail immobilier qui propose aux visiteurs un système d'alerte mail. Seulement voilà, nous avons de gros problèmes de performance et je voudrais savoir si un de vos experts avait des idées d'optimisation. Le système est classique : les visiteurs saisissent d'abord le type de bien recherché ainsi que leur adresse mail. Ensuite, ils reçoivent automatiquement toutes les nouvelles annonces qui correspondent à leurs critères de recherche. Pour les envois, voici la procédure actuellement utilisée :
Le problème de performance vient du temps passé sur la boucle qui pour chaque alerte, envoit une requête de recherche dans la vue. Peut importe qu'il y ait 3 000 nouvelles annonces dans la vue ou seulement 2. Le temps de traitement est pratiquement le même, puisqu'il y a autant de requêtes envoyées que d'alertes. C'était acceptable au début, mais le problème prend de l'ampleur avec la montée en puissance du site et du nombre des alertes mails. Le temps de traitement est encore tolérable pour un traitement quotidien (près 1h30), mais qui le devient nettement moins dès lors que le service marketing réclame la mise en place d'un système en quasi-temps réel : au moins 6 par jour, et de plus il faut anticiper une augmentation du nombre des alertes, qui ne va pas améliorer mes problèmes. Quelles pistes me conseillez-vous de suivre pour optimiser tout ça ? Je pensais commencer par essayer ceci : regrouper toutes les alertes dont les critères sont identiques pour faire des traitements groupés. Et réduire ainsi sensiblement le nombre de requêtes envoyées. D'autres idées ? |
|
|
00
|
|
|
#2 |
![]() ![]() ![]() Antoine DinimantConsultant en Business Intelligence Inscription : octobre 2006 Messages : 5 854 ![]() |
Les SGBD sont optimisés pour traiter les données en masse. La meilleure solution est d'utiliser une seule requête pour toutes les alertes...
|
|
|
00
|
|
|
#3 | |
|
Nouveau Membre du Club
![]() Inscription : décembre 2004 Messages : 69 ![]() |
Citation:
|
|
|
|
00
|
|
|
#4 | ||
![]() ![]() ![]() Antoine DinimantConsultant en Business Intelligence Inscription : octobre 2006 Messages : 5 854 ![]() |
Comme je ne connais pas ta base, c'est difficile de te répondre. Si par exemple tu as une table annonces(prix, surface) et une table recherches(utilisateur, prixmini, prixmaxi, surfacemini, surfacemaxi), ça te donne une requête de ce genre-là :
Code :
|
||
|
|
00
|
|
|
#5 |
|
Nouveau Membre du Club
![]() Inscription : décembre 2004 Messages : 69 ![]() |
Ha oui, pas bête du tout.
J'ai trop l'habitude de faire ce genre de sélection dans le WHERE, ce qui m'oblige à faire autant de requêtes que d'enregistrement à traiter. Comme quoi la bidouille c'est bien, mais quand on veut faire du boulot propre en sql, c'est vraiment un boulot à part entière Par contre pour mon problème, pour être plus flexible sur les fréquences d'envoi, il a finalement été décidé de régler le problème différemment : Je vais commencer par segmenter les alertes en fonction de leurs critères principaux, puis déporter les tests de comparaison à la création de chaque annonce. Les correspondances seront stockées et pour les envois, on aura plus qu'à déclencher les résultats déjà en mémoire. En plus, en déclenchant la comparaison à l'aide d'un trigger placé sur l'insertion, je n'ai pas à retoucher à mes scripts Php. C'est intéressant à régler comme problème, au besoin je vous tiens au courant |
|
|
00
|
|
|
#6 |
|
Nouveau Membre du Club
![]() Inscription : décembre 2004 Messages : 69 ![]() |
Finalement, après avoir perdu beaucoup de temps sur divers solutions, j'en suis venu à ta méthode.
Y'a pas à tortiller, ça dépotte, c'est de loin le plus efficace. MERCI MEC ! |
|
|
00
|
|
|
#7 |
![]() ![]() ![]() Antoine DinimantConsultant en Business Intelligence Inscription : octobre 2006 Messages : 5 854 ![]() |
lol
dis merci à Dr Codd ! |
|
|
00
|
|
|
#8 |
|
Invité de passage
![]() Inscription : février 2007 Messages : 2 ![]() |
je viens de trouver votre discussion à ce sujet, ce qui m'interresse enormement.
1- Avec la requete Inner Join , on va avoir tous les clients avec leur recherche Comment faites vous pour envoyer un email pour chaque client. table resultante ex : cli_nom | aff_type | aff_prix dupont | appartement | 120 000 € dupont | appartement | 131 000 € dupont | appartement | 148 000 € arobas | maison | 220 000 € arobas | maison | 250 000 € arobas | maison | 245 000 € - Vous faites de nouveau une requete sur cette vue ? - Comment faites vous pour remplir le mail pour dupont puis apres pour Arobas? 2- questions : Comment faites vous pour lancer la page web qui lance les emails à une heure donnée. (je suis en asp.net contrairement à El riico) D'avance merci Olivier |
|
|
00
|
Copyright © 2000-2012 - www.developpez.com