Je crois qu'il y en a quelques un sur le forum qui utilisent les XML fournis par Webmastravel. Je voulais savoir comment vous faisiez pour parser les fichiers XML super lourds.
Est-ce que vous faites ça avec PHP (ou ASP) ? Vous avez développé un script en C sur votre serveur ?
J'aimerai pouvoir parser un fichier de 300Mo et enregistrer les items dans une base mysql mais là je ne vois pas comment faire vu le poid ...
Re:Parsing gros fichier XML 300Mo
« Répondre #1 sur: le 17-03-2007 a 19:10:01 »
theonlydrayk
Invité
Il m'est arriver de parser un fichier CSV de 500 meg (les donner de recherche de AOL qui ont ete rendu publique) avec du php, je lai executer dans un shell SSH et pas dans un browser.
Pour le XML il faudrait probablement faire un petit analyseur maison (lire par petit bloque le fichiers) plutot qu'utiliser celui de php 5 ou certaines fonctions fait pour le xml en php 4, loader un fichier comme ca en memoire pour l'analyser va prendre plusieurs fois ca taille en memoire.
Re:Parsing gros fichier XML 300Mo
« Répondre #2 sur: le 17-03-2007 a 20:27:24 »
iowa
Invité
Si tu le fait en PHP change le time_limit. Si tu veux parser le fichier sur ton hebergement mutualisé tu n'as pas le choix, si tu as un serveur dédié tu peux écrire un programme que tu peux appeller en PHP ou avec un Cron
Je dois faire ca chaque soir ... le pb n'est pas de lancer le script en cron (pas de soucis pour ca), mais plutot de le faire fonctionner ! Je m'était fait un petit script pour parser le fichier, mais je l'ai laissé tourner 17h (lancé en SSH) sans qu'il y arrive ! En php ca me semble vraiment délicat :-/
Theonlydrack, tu avais fait comment pour ton fichier de 500Mo ? L'execution du script avait pris cb de temps ?
Re:Parsing gros fichier XML 300Mo
« Répondre #4 sur: le 18-03-2007 a 01:37:09 »
theonlydrayk
Invité
Moi c'etait un fichier CSV et pas XML.
Jai dabord utiliser un file_get_contents pour avoir le fichier. Mais ca prenais enormement de memoire et etais tres long a charger. (Jai jamais attendu la fin)
Jai executer le script 1 seule fois et je ne me souvient vraiment pas le temps que ca avais pris.
Si ton XML est bien former avec une fin de ligne a la fin de chaque tag. Tu pourrais faire la meme chose. Lire 1 ligne a la fois du fichier et analyser avec un regex ou strpos le plus rapide chaque string.
Essaye dabord un fread pour le stocker localement le fichier (je suppose que tu utilise un fget/file_get_content et tu travail sur une variable ?) Avec un fread-fwrite pour ecrire le fichier localement tu devrait sauver du temps. Le disque dur est plus rapide que la connextion internet. Et tu va p-e tomber en timeout si tu lanalyse direct de la connection. Tu va deja savoir combien ca prend de temps de le copier venant du site web au disque dur.
Si tu utilise la fonction XML de php5 ou le charger dans un array ou autre fonction xml de php4, ca va etre impossible ca c'est sur. Le xml parse dabord le fichier pour voir si il est valid et le re-parse pour le mettre dans un array. Un array prend plusieurs fois ca taille en memoire a cause de la facon dont il est stocker.
Re:Parsing gros fichier XML 300Mo
« Répondre #5 sur: le 18-03-2007 a 10:59:47 »
iowa
Invité
Salut,
Si tu peux exécuter des programmes, l'idéal serait de faire un exe avec Dotnet qui implémente XPath et qui est très efficace avec le Xml. Est-ce possible dans ton cas ?