Version complète: sur le forum Webmaster Hub : Question de méthode...
Webmaster Hub > Création et exploitation de Sites Internet > Les langages du Net > SQL
bobdeo
Bonjour,

Chaque jour, à heure fixe, j'effectue automatiquement le traitement suivant :
1- Vidage de la table A
2- Import d'environ 50Mo de données dans la table A

Ce traitement dure environ 3 minutes ce qui rend le site indisponible pendant cette durée.

Qu'elle est la méthode à suivre pour éviter ça ? J'en pensé à
1- effectuer l'import dans une table temporaire (table B)
2- suppression de la table A
3- renommer table B en table A...

Qu'en pensez-vous ?
Merci pour votre aide.
destroyedlolo
Perso, j'utilise une vue qui pointe alternativement sur la table A ou B.

Ceci dit, j'utilise PostGreSQL ...
bobdeo
perso, c'est du MySQL...
f_trt
Je crois que ton 1 2 3 est pas mal.
Tu aurais aussi la solution suivante :

Mettre dans un fichier de config le nom de la table.

Tu ferais alors
1 import dans table A ou B en fonction de celle que tu dois mettre à jour
2 changement du pointage vers A ou B a jour dans ton fichier de config

Tu pourrais presque automatiser cela imagine que tu fasses un test dans ton fichier config
pour savoir quelle table est le plus à jour et tu utilises celle là. Tu n'as plus qu'a t'occuper
de l'import euh par contre il faut faire ce test que toute les 5 mn on va dire pour pas te retrouver
en train d'utiliser une table en cours de mise à jour.
destroyedlolo
CITATION(bobdeo @ mercredi 9 mai 2007, 10h26) *
perso, c'est du MySQL...

Il serait quant meme etonnant que MySQL ne connaisse pas les Views wacko.gif
Par contre, beaucoup de SGBD ne permettent pas d'updater une views.
bobdeo
Pas mal la solution avec le fichier de config... Je peux changer le pointage après le traitement.

En détail, ça donne :
- Voir quelle table est active : si A utliser B, si B utiliser A
- vider puis remplir la table sélectionnée
- Changer la table active : si A utliser B, si B utiliser A

et c'est réglé ;-)
Par contre, la mise en place va être chiante : tous mes scripts pointent vers la même table... à moins que l'aiguillage se fasse au niveau du choix de la base...

UPDATE 15:04 -> ok, je pars sur un changement de nom table à la fin du traitement...
Galeenet
J'aurais fait une mise à jour décalée :

la table A est en cours d'utilisation. A coté tu as une table A_origine, avec les données mises à jour.
Tu lockes A, tu renommes A en A_old, tu renommes A_origine en A, et tu unlockes.
Ensuite tu peux mettre à jour à nouveau smile.gif
bobdeo
Question surement très bête : comment tu lockes / unlockes ? pourquoi ? cette manip ?

Merci
Galeenet
LOCK TABLE, UNLOCK TABLE... smile.gif

la manip ? pour "bloquer" les mises à jour de la table pendant le renommage.
Ceci est une version "bas débit" de notre forum. Pour voir la version complète avec plus d'information, la mise en page et les images, veuillez cliquer ici.