idjinn Posted May 18, 2011 Share Posted May 18, 2011 Bonjour,Dans le cadre du développement d'une librairie numérique, je suis amené à parser de gros fichiers XML (la taille faisant jusqu'à 300Mo) pour extraire des notices bibliographique.J'ai lu que dans ce cas de figure il était préférable d'utiliser SAX que DOM ? Qu'en pensez-vous ? Je ne connais pas du tout SAX.Par ailleurs, je dois faire un tri parmi les notices et en extraire certaines (qui correspondent en fait à des ouvrages sans DRM). Le plus simple n'est-il pas de créer un nouveau fichier XML contenant uniquement les notices souhaitées et de le parser ensuite pour en extraire les infos et les insérer dans la base de données (mysql) ?Toute contribution sera la bienvenue !Merci. Link to comment Share on other sites More sharing options...
cobolian Posted May 19, 2011 Share Posted May 19, 2011 Je fait souvent des imports de fichiers divers. En général je procede comme ceci :1/ creation d'une table temporaire2/ injection du ou des fichiers dans la table3/ traitements divers (formatage, nettoyage....)4/ import dans la bdd finale.Ca permet d'avoir une grande souplesse dans les traitements, et un code très propre. D'autre part cela evite d'avoir des inserts à la tonne en utilisant une seule requete pour l'import. LA reprise sur erreurs devient un vrai bonheur, et en cas de modif du fichier en entrée : les doigts dans le nez. Testé et approuvé sur des grosses volumétries. Link to comment Share on other sites More sharing options...
idjinn Posted May 19, 2011 Author Share Posted May 19, 2011 1/ creation d'une table temporaire2/ injection du ou des fichiers dans la table3/ traitements divers (formatage, nettoyage....)4/ import dans la bdd finale. Merci. Insérer les données dans la base faisait également partie de mes hypothèses de travail. Je crois que je vais passer par là ce qui sera plus souple ensuite pour les traiter ! Link to comment Share on other sites More sharing options...
cobolian Posted May 19, 2011 Share Posted May 19, 2011 Au fait, pour etre efficace, il faut faire des insert de masse (insert into talbeDest select from tableTemporaire) pour l'alim de la table de destination finale et pas une boucle lecture/ecriture à chaque ligne. Pour l'alim de la table temporaire, si tu as un dédié, il y a des outils pour monter un xml directement dans la table. Et tu fais les traitements (toujours en masse, pas par ligne avec un foreach) en sql.Pour les traitements, si tu mets les bons index, tu peux obtenir des gains énormes. Link to comment Share on other sites More sharing options...
idjinn Posted May 19, 2011 Author Share Posted May 19, 2011 Pour l'alim de la table temporaire, si tu as un dédié, il y a des outils pour monter un xml directement dans la table. Et tu fais les traitements (toujours en masse, pas par ligne avec un foreach) en sql. Tu m'intéresses là ! Tu peux développer un peu ? Merci ! Link to comment Share on other sites More sharing options...
cobolian Posted May 19, 2011 Share Posted May 19, 2011 hop : http://jcrozier.developpez.com/tutoriels/sgbd/mysql/xml/#LI-2-3Sinon, par xlst (un petit coup de google devrait te renseigner). Link to comment Share on other sites More sharing options...
idjinn Posted May 19, 2011 Author Share Posted May 19, 2011 hop : http://jcrozier.developpez.com/tutoriels/sgbd/mysql/xml/#LI-2-3Sinon, par xlst (un petit coup de google devrait te renseigner). Merci. J'ai trouvé un lien intéressant : http://forum.phpfrance.com/faq-tutoriels/importer-des-donnees-xml-dans-une-base-donnees-mysql-t243506.htmlqui propose préconise l'utilisation de LOAD XML INFILE qui n'est disponible qu'à partir de MySQL 6.EDIT : mon hébergeur vient de me signaler que "Cette version n'est pas supportée par nous et est beaucoup trop instable.".Je vais devoir passer par les solutions disponibles sur le 5... dommage. Link to comment Share on other sites More sharing options...
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now