Tables trop lourdes
Hors ligneAmira.web Le 24/06/2010 à 10:12 Profil de Amira.web Configuration de Amira.web

Bonjour tout le monde,

J'ai une BDD MySQL et je travaille avec comme language : PHP

Dans cette BDD, y a 2 tables trop lourdes, parce que l'insertion se fait chaque seconde.

Je souhaite faire en sorte d'avoir dans ces 2 tables les données des 2 derniers mois. Si je le fais normalement avec des requetes normales et tout, ça va planter le serveur. Si je crée une nouvelle table et je copie les données des 2 derniers mois, ça peut planter le serveur aussi.

Avez vous une idée comment gerer avec ce genre de problème ?

Merci bien

Hors ligneTenebriox Le 24/06/2010 à 15:21 Profil de Tenebriox Configuration de Tenebriox

Selon un petit calcul :
1h = 3600 s
1j = 86400 s
1mois = 2 592 000 s
2 mois = 5 184 000 s = 10 368 000 nouveaux enregistrements (tu as deux tables), sans compter ce qui se passe dans les autres tables

Donc bon, beaucoup de choses ne vont pas :

mysql pour commencer qui n'est pas adapté pour gérer facilement des volumes aussi conséquents, il faudrait migrer vers un nouveau sgbd (payant !) qui est capable de gérer de tels volumes de données, comme informix. Mais associer une base informix à une appli web, ça va être folklorique !

Le serveur est-il assez puissant gérer une telle charge de travail efficacement ? Parce que là, il te faut pas le vieux pc transformé en serveur web pour que ça marche bien, il te faut une machine puissante...

Bref, en fait je t'encourage vivement à revoir l'utilité de faire un insert/seconde, pour faire une appli web ! Quelle est ta problématique ?

Sinon, des choses à essayer qui peuvent t'aider :

Les triggers (à chaque nouveaux insert, tu supprimmes un enregistrement par exemple). La mise à jour de la base se fera donc progressivement, et non d'un coup comme tu essayes de le faire. A priori, je pense que ça devrait marcher sans faire planter le sgbd, mais ça va ralentir énormément ton application. Indexe bien tes tables et ça peut peut-être devenir une solution correcte

Tu peux aussi tester des outils d'object relational mapping (orm) pour faire des insert/delete en masse, du genre doctrine même si à priori c'est pas le plus adapté (le requêteur intégré à mysql est normalement le plus adapté) :

http://www.doctrine-project.org/documentation/manual/2_0/en/batch-processing
 

--
"Une société égalitaire, c'est le contraire d'une société de liberté et de responsabilité." N. Sarkozy
Hors ligneAmira.web Le 25/06/2010 à 09:58 Profil de Amira.web Configuration de Amira.web

Merci bien Tenebriox pour ta réponse.

Je pense suivre votre méthode de triggers. Mais la question qui se pose jusqu'a maintenant, comment faire pour vider les 2 tables et laisser juste les données des 2 derniers mois sans faire tomber le serveur ??

Merci pour toute aide.

Hors ligneTenebriox Le 25/06/2010 à 12:04 Profil de Tenebriox Configuration de Tenebriox

delete * from matable where date <='20100401'  ne fonctionne pas ?

Essaye petit à petit si ça ne fonctionne pas directement, d'abord commence par supprimmer le dernier mois actif, et remonte ainsi jusqu'à ce qu'il ne te reste que les deux derniers mois.

--
"Une société égalitaire, c'est le contraire d'une société de liberté et de responsabilité." N. Sarkozy
Hors ligneAmira.web Le 25/06/2010 à 17:56 Profil de Amira.web Configuration de Amira.web

Tu as une idée comment faire une procédure qui se lance chaque 15 min pour supprimer 1000 enregistrements ?

Hors ligneXenonmax Le 30/09/2010 à 21:06 Profil de Xenonmax Configuration de Xenonmax

Va faire un tour ici, il te montre comment executer des scripts périodiquement.

http://matthieu.developpez.com/execution_periodique/

 

Si c'est pas indiscret, tu y met quoi dans tes tables ?

Vous avez résolu votre problème avec VIC ? Faites-le savoir sur les réseaux sociaux !
Vulgarisation-informatique.com
Cours en informatique & tutoriels