Bonsoir !
Pour expliquer un peu le contexte, j'ai un fichier .csv à traiter.
Il contient en gros :
données A (plusieurs champs), données B (plusieurs champs)
et je dois faire appel à un service web qui me retournera une valeur selon les données A et B.
Donc 2 champs à rajouter au fichier : la valeur, ou si les données sont incomplètes un code erreur + un champs indiquant que la ligne a été modifiée (une fois qu'elle sera corrigé).
Donc j'ai un gros fichier (plus de 10 000 entrées), chaque entrée à traiter, et surtout une gestion de toutes les entrées incomplètes pour les modifier et les retraiter. En premier lieu il est uploadé sur le serveur.
J'ai donc pensé ensuite à charger cela dans une base SQL (mysql me parait suffisant). J'ai découvert la commande "LOAD DATA INFILE" (http://dev.mysql.com/doc/refman/5.0/fr/load-data.html) qui permet justement de charger très rapidement des gros fichiers .csv dans une table SQL.
Mon soucis, j'aimerais ajouter le nom du fichier à chaque entrée dans la base, et j'ai pas l'impression que ca soit possible de faire ca directement avec le "LOAD DATA INFILE".
Donc je me demande pour quelle solution opter ?
1/ Je "LOCK" la table, je charge, j'update les 10K+ entrées avec le nom du fichier, et je la "UNLOCK"
2/ Je charge dans une table temporaire, et je transfère vers une autre table
3/ J'oublie le "LOAD DATA INFILE", et j'utilise plutot la fonction fgetcsv() et du coup j'insère comme je veux.
J'ai fait des recherches la dessus mais je n'ai pas encore pu trancher et je viens donc solliciter votre aide ! Vu la taille du fichier la question de rapidité importe. Surtout que je sais pas encore comment ca se passerait si la connexion s'interrompt (faut que ca soit fiable).
Merci d'avance pour les conseils que vous apporterez !
Partager