Optimiser l'export en CSV (1 millions de lignes)
Bonjour a tous,
Mon titre n'est pas tres clair donc je vais essayer d'expliquer en detail mon probleme.
Il m'est demander de creer un script d'export de donnee d'une base MySql, d'une requete plus precisement avec quelques modifications simple sur les donnees (strsub) vers des fichiers CSV.
Mon principal probleme est que ma base contient plus d'un millions de lignes et l'export est comme vous pouvez vous en douter tres long.
Je dois creer une centaine de fichier CSV (en gros chacun contenant 100.000 lignes) et un fichier CSV contenant toutes les donnees. Cet export doit se faire toute les semaines et il est prevu d'arreter le site pendant 3h.
J'ai deja ecris la fonction PHP permettant l'export mais c'est beaucoup trop long, j'estime actuelement mon script PHP a environ 40h d'execution...
Je suis donc a la recherche de solution, toutes les solutions possibles pour optimiser un maximum mon export.
- Je me suis renseigner du cote du FORK en php (pcntl_fork) mais je n'ai pas encore pu le tester (il semblerais qu'il faille recompiler php et mon environnement de dev est sous windows). M'enfin dans le principe vu que la creation d'un fichier CSV prend 40 min, si tout se fait plus ou moins en meme temps on doit pouvoir s'en sortir.
Les problemes :
.il semblerait qu'on ne peut pas lancer un fork php avec apache
.je ne sais pas si 100 processus sont facilement gerable par le proc
.je ne sais pas si MySql gere facilement 100 processus l'interrogeant en meme temps.
Donc je sais pas si c'est faisable
- J'ai aussi decouvert qu'il y avait un moteur CSV avec MySQL, je ne sais pas du tout si c'est envisageable (en terme de performance) de creer une table en utilisant le moteur CSV (CREATE TABLE ... ENGINE = CSV;) initialise a partir de ma requete.
- En fait mon script doit simplement s'executer toute les semaines, il n'a pas forcement besoin d'etre en PHP donc je me dit meme que peut etre un autre langage peut etre mieux, mais j'en sais pas plus.
Que feriez vous ? Que me conseillez vous ?
merci d'avance